📦 数组创建
import numpy as np
# 从列表创建
arr = np.array([1, 2, 3, 4, 5])
# 创建特殊数组
zeros = np.zeros((3, 4)) # 全零矩阵
ones = np.ones((2, 3)) # 全一矩阵
empty = np.empty((2, 2)) # 未初始化
eye = np.eye(3) # 单位矩阵
# 创建序列
range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
linspace = np.linspace(0, 1, 5) # [0, 0.25, 0.5, 0.75, 1]
# 随机数组
random_arr = np.random.randn(3, 3) # 标准正态分布
randint_arr = np.random.randint(0, 10, (3, 3)) # 整数
# 数组属性
print(arr.shape) # 形状
print(arr.dtype) # 数据类型
print(arr.ndim) # 维度
print(arr.size) # 元素总数
🔄 数组变形
arr = np.arange(12)
# reshape: 改变形状
matrix = arr.reshape(3, 4)
# [[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]
# -1自动计算维度
auto_shape = arr.reshape(3, -1)
# flatten: 展平为一维
flat = matrix.flatten()
# 转置
transposed = matrix.T
# 升维/降维
expanded = arr[np.newaxis, :] # 添加新轴
squeezed = expanded.squeeze() # 移除长度为1的轴
# 堆叠
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
vstacked = np.vstack([a, b]) # 垂直堆叠
hstacked = np.hstack([a, b]) # 水平堆叠
📡 广播机制
不同形状数组的运算
NumPy会自动扩展较小的数组以匹配较大的数组形状
# 标量与数组
arr = np.array([1, 2, 3])
print(arr + 10) # [11, 12, 13]
# 不同形状数组
matrix = np.array([[1, 2, 3],
[4, 5, 6]])
vector = np.array([10, 20, 30])
# 广播:vector扩展为(2, 3)
print(matrix + vector)
# [[11, 22, 33],
# [14, 25, 36]]
# 广播规则
# 1. 从后往前比较维度
# 2. 维度相等或其中一个为1时可广播
# 3. 缺失维度视为1
⚡ 向量化运算
💡
向量化优势
避免Python循环,使用NumPy内置函数可提升10-100倍性能。
import numpy as np
import time
# 生成大数组
size = 10_000_000
a = np.random.randn(size)
b = np.random.randn(size)
# 向量化运算(快)
start = time.time()
c = a + b
print(f"向量化: {time.time() - start:.4f}秒")
# 循环运算(慢)
start = time.time()
c = [a[i] + b[i] for i in range(size)]
print(f"循环: {time.time() - start:.4f}秒")
# 常用向量化函数
arr = np.random.randn(1000)
print(np.sum(arr)) # 求和
print(np.mean(arr)) # 均值
print(np.std(arr)) # 标准差
print(np.max(arr)) # 最大值
print(np.min(arr)) # 最小值
print(np.argmax(arr)) # 最大值索引