我有一个矩阵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
?
感谢,
克里斯
答案 0 :(得分:1)
使用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]])
答案 1 :(得分:0)
简单:
v * T
numpy重载算法以大多数时候都有意义的方式运行。在您的情况下,由于T是一个矩阵,它在执行乘法之前也会将v转换为矩阵。这将v变为行向量。因此v*T
执行矩阵乘法,但T*v
会抛出异常,因为v是错误的形状。但是,您可以使用v.reshape(3,1)
制作正确的形状,或使用T.dot(v)
或numpy.dot(T,v)
将v视为正确方向的矢量。