Проблема умножения транспонирования - PullRequest
17 голосов
/ 09 июля 2010

Я пытался найти собственные значения матрицы, умноженные на ее транспонирование, но я не смог сделать это, используя 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.

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

Ответы [ 2 ]

19 голосов
/ 09 июля 2010

Вы можете найти этот учебник полезным, так как знаете MATLAB.

Также попробуйте умножить testmatrix на функцию dot(), т.е. numpy.dot(testmatrix,testmatrix.T)

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

4 голосов
/ 09 июля 2010

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

prod = numpy.dot(testmatrix, testmatrix.T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...