2014-02-21 5 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]) 

Как умножать массив v матрицей T правильно в python?

спасибо,

Chris

+0

, чтобы уточнить, вы хотите выполнить v * T или T * v? – Thayne

ответ

0

Вы можете использовать оператор * после того, как вы выстроили размеры правильно (количество столбцов в LHS должно равняться количество строк в РИТ):

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 правильную форму с v.reshape(3,1) или обработать v как вектор правильной ориентации с T.dot(v) или numpy.dot(T,v).

Смежные вопросы