2014-02-21 207 views
3

我具有矩阵T如何乘numpy矩阵乘numpy数组?

[ 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]) 

如何由矩阵T正确乘以阵列v在python中?

感谢,

克里斯

+0

要澄清,你想执行v * T或T * v吗? – Thayne

回答

0

可以使用*运营商,一旦你正确地列队尺寸(LHS列数必须等于RHS行):

T * v.reshape(3,1)

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]]) 
0

简单:

v * T 

numpy的超载运算的方式,有意义的大部分时间运行。在你的情况下,由于T是一个矩阵,所以它在转换乘法之前将v转换为矩阵。这将v变成一个行向量。因此v*T执行矩阵乘法,但T*v引发异常,因为v是错误的形状。但是,您可以使用v.reshape(3,1)使v成为正确的形状,或者使用​​或numpy.dot(T,v)将v作为正确方向的向量。