如何在NumPy中对两个矩阵的对应列执行矩阵乘法并求和?
高效实现列外积求和的NumPy方法
已知两个形状为(2, N)的矩阵A和b,需要对每一列执行以下操作:取A的第i列(2x1列向量)与b的第i列的转置(1x2行向量)做矩阵乘法得到2x2矩阵,再将所有列对应的2x2矩阵求和。无需循环,用NumPy的向量化操作即可高效完成。
核心解法
直接使用NumPy的矩阵乘法运算符@(或np.matmul函数):
import numpy as np A = np.array([[1, 3, 5], [2, 4, 6]]) b = np.array([[7, 9, 11], [8, 10, 12]]) # 直接计算所有列外积的和 result = A @ b.T print(result)
运行后输出:
[[ 89 98] [116 128]]
原理验证
这个结果和手动分步计算的结果完全一致:
- 第1列外积:
[[1],[2]] @ [[7,8]] = [[7,8],[14,16]] - 第2列外积:
[[3],[4]] @ [[9,10]] = [[27,30],[36,40]] - 第3列外积:
[[5],[6]] @ [[11,12]] = [[55,60],[66,72]] - 求和结果:
[[7+27+55, 8+30+60],[14+36+66,16+40+72]] = [[89,98],[116,128]]
为什么这个方法高效
矩阵乘法A @ b.T的本质就是将A的每一列与b的对应列做外积后求和,完全贴合你的需求。这种向量化操作由NumPy底层的C优化实现,避免了Python循环的开销,当N取值很大时,性能优势会非常明显。
内容的提问来源于stack exchange,提问作者Lorde213423432e43434
相关产品推荐
相关产品推荐

