матричное умножение массивов в питоне - PullRequest
3 голосов
/ 15 апреля 2011

Мне немного глупо спрашивать об этом, но я не могу найти ответ

Используя массивы в Numpy, я хочу умножить массив 3X1 на массив 1X3 и получить массив 3X3 в качестве результата,но поскольку функция точки всегда обрабатывает первый элемент как вектор столбца, а второй - как вектор строки, я могу «заставить его работать», поэтому мне приходится использовать матрицы.

A=array([1,2,3])  
print "Amat=",dot(A,A)  
print "A2mat=",dot(A.transpose(),A)  
print "A3mat=",dot(A,A.transpose())  
u2=mat([ux,uy,uz])  
print "u2mat=", u2.transpose()*u2  

И выходные данные:

Amat= 14  
A2mat= 14  
A3mat= 14  
u2mat=  
 [[ 0.  0.  0.]  
        [ 0.  0.  0.]  
        [ 0.  0.  1.]]

Ответы [ 3 ]

7 голосов
/ 15 апреля 2011

np.outer - это встроенная функция, которая делает это:

A = array([1,2,3])
print "outer:", np.outer( A, A )

(transpose не работает, потому что A.T точно так же, как A для 1d-массивов:

print A.shape, A.T.shape, A[:,np.newaxis].shape
>>> ( (3,), (3,), (3, 1) )

)

3 голосов
/ 15 апреля 2011
>>> A=np.array([1,2,3])
>>> A[:,np.newaxis]
array([[1],
       [2],
       [3]])
>>> A[np.newaxis,:]
array([[1, 2, 3]])
>>> np.dot(A[:,np.newaxis],A[np.newaxis,:])
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])
0 голосов
/ 16 апреля 2011

Один из способов получить это - работать с классом / типом matrix.

import numpy as np
A = np.matrix([1,2,3])
B = A.T  #transpose of A

>>> B*A 
>>> matrix([[1, 2, 3],
    [2, 4, 6],
    [3, 6, 9]])

объекты, принадлежащие классу матрицы, ведут себя почти так же, как массивы.На самом деле массивы и матрицы взаимозаменяемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...