如何在NumPy中执行ndarray的(1×3)(3×3)(3×1)矩阵乘法得到1×1结果?
在NumPy中实现(1×3)×(3×3)×(3×1)的矩阵乘法
首先还原你的数组定义:
import numpy as np a = np.array([1, 2, 3]) B = np.array([[1, 2, 3], [2, 2, 7], [3, 4, 6]])
下面提供几种简洁的实现方式:
方法1:链式调用np.dot
利用矩阵乘法的结合律,分两步完成运算:
# 先计算a与B的乘积,再和a的转置相乘 result = a.dot(B).dot(a.T) # 输出:array(129)
也可以调整结合顺序,先算B和a转置的乘积:
result = a.dot(B.dot(a.T))
方法2:使用@矩阵乘法运算符(Python 3.5+)
@是NumPy原生支持的矩阵乘法语法,写法更贴近数学表达式:
result = a @ B @ a.T # 输出:129
方法3:利用np.einsum(爱因斯坦求和约定)
通过指定维度的收缩规则,精准实现运算:
result = np.einsum('i,ij,j->', a, B, a) # 输出:129
这里的'i,ij,j->'表示:匹配第一个数组的i维度、第二个数组的i/j维度、第三个数组的j维度,最终收缩所有维度得到标量结果。
以上所有方法最终都会得到你需要的1×1结果(实际表现为NumPy标量或0维数组,数值为129)。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

