NumPy 运算
NumPy 是 Python 中用于数值计算的核心库,提供高性能的数组操作。
数组创建
python
import numpy as np
# 创建数组
arr = np.array([1, 2, 3, 4, 5])
# 创建零数组
zeros = np.zeros(5)
# 创建一数组
ones = np.ones((3, 4))
# 创建空数组
empty = np.empty((2, 3))
# 创建范围数组
arr_range = np.arange(0, 10, 2)
# 创建随机数组
random = np.random.rand(3, 3)
# 创建正态分布数组
normal = np.random.randn(100)数组操作
python
# 数组形状
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # (2, 3)
# 数组维度
print(arr.ndim) # 2
# 数组大小
print(arr.size) # 6
# 数据类型
print(arr.dtype) # int64
# 改变形状
arr.reshape(3, 2)
# 展平数组
arr.flatten()
# 转置数组
arr.T元素访问
python
# 访问元素
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[0, 0]) # 1
print(arr[1, 2]) # 6
# 切片
print(arr[:, 1]) # [2, 5]
print(arr[0, :]) # [1, 2, 3]
# 条件索引
mask = arr > 3
print(arr[mask]) # [4, 5, 6]
# 花式索引
indices = [0, 2]
print(arr[:, indices]) # [[1, 3], [4, 6]]数学运算
python
# 基本运算
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2) # [5, 7, 9]
print(arr1 - arr2) # [-3, -3, -3]
print(arr1 * arr2) # [4, 10, 18]
print(arr1 / arr2) # [0.25, 0.4, 0.5]
# 矩阵运算
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
print(np.dot(matrix1, matrix2)) # 矩阵乘法
# 数学函数
print(np.sin(arr1))
print(np.cos(arr1))
print(np.exp(arr1))
print(np.log(arr1))统计函数
python
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 求和
print(np.sum(arr)) # 21
print(np.sum(arr, axis=0)) # [5, 7, 9]
print(np.sum(arr, axis=1)) # [6, 15]
# 均值
print(np.mean(arr)) # 3.5
# 标准差
print(np.std(arr))
# 最大值/最小值
print(np.max(arr)) # 6
print(np.min(arr)) # 1
# 中位数
print(np.median(arr)) # 3.5线性代数
python
# 矩阵逆
matrix = np.array([[1, 2], [3, 4]])
print(np.linalg.inv(matrix))
# 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(matrix)
# 奇异值分解
u, s, v = np.linalg.svd(matrix)
# 行列式
print(np.linalg.det(matrix))
# 求解线性方程组
A = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])
x = np.linalg.solve(A, b)性能优化
python
# 使用向量化操作
arr = np.arange(1000000)
result = arr * 2 # 比循环快很多
# 使用广播
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])
result = arr1 + arr2 # 自动广播
# 使用视图而不是副本
arr = np.array([1, 2, 3, 4, 5])
view = arr[1:4] # 视图
view[0] = 10 # 会影响原数组
# 使用 np.where 代替条件分支
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 3, arr * 2, arr)注意事项
- 内存布局: NumPy 数组在内存中是连续存储的
- 数据类型: 选择合适的数据类型可以节省内存
- 广播规则: 理解广播规则可以简化代码
- 避免循环: 尽量使用向量化操作代替显式循环