24

I tried to find the eigenvalues of a matrix multiplied by its transpose but I couldn't do it using numpy.

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

I expected to get the following result for the product:

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

and eigenvalues:

0.0000
0.0000
0.3929
203.6071

Instead I got ValueError: shape mismatch: objects cannot be broadcast to a single shape when multiplying testmatrix with its transpose.

This works (the multiplication, not the code) in MatLab but I need to use it in a python application.

Can someone tell me what I'm doing wrong?

Virgiliu
  • 3,068
  • 6
  • 32
  • 55

3 Answers3

27

You might find this tutorial useful since you know MATLAB.

Also, try multiplying testmatrix with the dot() function, i.e. numpy.dot(testmatrix,testmatrix.T)

Apparently numpy.dot is used between arrays for matrix multiplication! The * operator is for element-wise multiplication (.* in MATLAB).

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Jacob
  • 34,255
  • 14
  • 110
  • 165
8

You're using element-wise multiplication - the * operator on two Numpy matrices is equivalent to the .* operator in Matlab. Use

prod = numpy.dot(testmatrix, testmatrix.T)
ptomato
  • 56,175
  • 13
  • 112
  • 165
1

You can also write testmatrix@testmatrix.T

  • 2
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Dec 23 '22 at 16:18