我有一个矩阵T
:
[ 0.2 0.4 0.4]
[ 0.8 0.2 0. ]
[ 0.8 0. 0.2]
T = numpy.mat("0.2 0.4 0.4;0.8 0.2 0.0;0.8 0.0 0.2")
我有向量v
,numpy.array(73543, -36772, 36772)
v = numpy.array([ 73543, -36772, 36772])
如何在 python 中正确将数组v
乘以矩阵T
?
谢谢
克里斯
使用numpy.dot
,这与*
运算符不太一样:
In [138]: T.dot(v) #the resulting shape is (1, 3), not (3, 1) if you don't care
Out[138]: matrix([[ 14708.6, 51480. , 66188.8]])
In [139]: v.dot(T) #same with v * T
Out[139]: matrix([[ 14708.6, 22062.8, 36771.6]])
In [140]: T.dot(v[:, None]) #if you need the shape to be (3, 1) when doing T*v
Out[140]:
matrix([[ 14708.6],
[ 51480. ],
[ 66188.8]])
简单:
v * T
Numpy 重载算术以大多数时候有意义的方式运行。在您的情况下,由于 T 是一个矩阵,因此它会在执行乘法之前将 v 转换为矩阵。这会将 v 转换为行向量。因此,v*T
执行矩阵乘法,但T*v
抛出异常,因为 v 是错误的形状。但是,您可以使用 v.reshape(3,1)
使 v 成为正确的形状,或者将 v 视为具有 T.dot(v)
或 numpy.dot(T,v)
的正确方向的向量。