2010-07-09 18 views
11

Ho cercato di trovare gli autovalori di una matrice moltiplicati per la sua trasposizione ma non potevo farlo usando numpy.Problema di moltiplicazione del trasporto di Numpy

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

mi aspettavo di ottenere il seguente risultato per il prodotto:

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

e autovalori:

0.0000 
0.0000 
0.3929 
203.6071 

Invece mi hanno dato ValueError: shape mismatch: objects cannot be broadcast to a single shape quando moltiplicando testmatrix con la sua trasposizione.

Questo funziona (la moltiplicazione, non il codice) in MatLab ma ho bisogno di usarlo in un'applicazione python.

Qualcuno può dirmi cosa sto facendo male?

risposta

12

È possibile trovare questo tutorial utile poiché si conosce MATLAB.

Inoltre, provate moltiplicando testmatrix con la funzione dot(), cioè numpy.dot(testmatrix,testmatrix.T)

Apparentemente numpy.dot è utilizzato tra array di moltiplicazione matriciale! L'operatore * è per la moltiplicazione a livello di elemento (.* in MATLAB).

+1

PEP 465 consente l'uso dell'operatore '@' infisso: 'mat1 @ mat2' – BallpointBen

2

Si utilizza la moltiplicazione a livello di elemento: l'operatore * su due matrici di Numpy equivale all'operatore .* in Matlab. Utilizzare

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