2010-07-09 8 views
11

Я попытался найти собственные значения матрицы, умноженной на ее транспонирование, но я не мог сделать это с помощью numpy.Проблема с множественным транспонированием numpy

testmatrix = numpy.array([[1,2],[3,4],[5,6],[7,8]]) 
prod = testmatrix * testmatrix.T 
print eig(prod) 

Я ожидал получить следующий результат для продукта:

5 11 17 23 
11 25 39 53 
17 39 61 83 
23 53 83 113 

и собственные значения:

0.0000 
0.0000 
0.3929 
203.6071 

Вместо этого я получил ValueError: shape mismatch: objects cannot be broadcast to a single shape при умножении testmatrix с транспонированной.

Это работает (умножение, а не код) в MatLab, но мне нужно использовать его в приложении python.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

ответ

12

Возможно, это tutorial полезно, так как вы знаете MATLAB.

Кроме того, попробуйте умножив testmatrix с функцией dot(), т.е. numpy.dot(testmatrix,testmatrix.T)

Видимо numpy.dot используется между массивами для умножения матриц! Оператор * предназначен для умножения по элементам (.* в MATLAB).

+1

PEP 465 позволяет использовать оператор infix '@': 'mat1 @ mat2' – BallpointBen

2

Вы используете умножение по типу - оператор * на двух матрицах Numpy эквивалентен оператору .* в Matlab. Использовать

prod = numpy.dot(testmatrix, testmatrix.T)