如何将numpy数组乘以numpy矩阵?

时间:2014-02-21 01:03:04

标签: python numpy matrix linear-algebra matrix-multiplication

我有一个矩阵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

感谢,

克里斯

2 个答案:

答案 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视为正确方向的矢量。