无需for循环:用Numpy实现矩阵批量乘向量数组
如何高效实现N个二维向量与2x2矩阵的批量相乘
你可以利用NumPy的向量化矩阵乘法替代循环,这会大幅提升计算效率,尤其是当N值较大时。以下是几种简洁高效的实现方式:
方法1:使用np.dot(最常用)
直接对矩阵和数组X执行点积运算,NumPy会自动处理批量维度:
import numpy as np matrix = np.array([ [0, 1], [0, -1] ]) X = np.array([ [0, 0], [1, 1], [2, 2] ]) # 批量计算矩阵与每个向量的乘积 Y = np.dot(matrix, X.T).T # 等价循环中的逐个dot操作 # 也可写成 Y = X @ matrix.T,结果完全一致
方法2:使用@运算符(Python 3.5+支持)
@是NumPy原生的矩阵乘法运算符,语法更直观:
Y = (matrix @ X.T).T # 或更简洁的写法:Y = X @ matrix.T
方法3:使用np.matmul
np.matmul专为矩阵乘法设计,天然支持批量操作:
Y = np.matmul(matrix, X.T).T # 等价写法:Y = np.matmul(X, matrix.T)
验证结果
以上三种方法得到的Y均与预期一致:
print(Y) # 输出: # [[ 0 0] # [ 1 -1] # [ 2 -2]]
性能说明
NumPy的向量化操作基于底层C实现,避免了Python循环的额外开销,当N达到上万甚至更大规模时,性能差距会非常显著。
内容的提问来源于stack exchange,提问作者johnny rotten
相关产品推荐
相关产品推荐

