2017-02-18 6 views
1

Ich überschreibe ein Programm von Matlab zu Python. Ich erkannte einen Unterschied in einer Multiplikation zwischen Arrays. Hier ein Beispiel:Unterschied zwischen Numpy und Matlab in Multiplikation von Arrays

A = [-1822.87977846-4375.93518777j 
     3675.88618351+3824.34290883j 
     971.68964707-2393.36758923j] 

In Matlab:

A*A'= 5.7282e+07 

In Python:

np.dot(A,A) = -21723405.178+39418085.0343j 

Wie das gleiche Ergebnis von A '* A in Numpy erhalten?

Vielen Dank.

+2

Sie sehen das ** '** im Matlab-Code? Ja, es ist wichtig und nicht in deinem Python-Code enthalten :-). Hinweis: ** komplex konjugierter Transponieroperator **. – sascha

Antwort

4

Zunächst einmal erinnern, in MATLAB, ' ist anders als .'.

' tut complex conjugate transpose

.' tut non-conjugate transpose

Auf einem realen Wert Vektors oder einer Matrix beide Operatoren ähnliches Ergebnis erhalten. Auf komplexen Vektoren oder Matrizen erhalten sie jedoch unterschiedliche Ergebnisse. Überprüfen Sie die Links, um Matlab-Beispiele für beide zu finden.

In MATLAB, können Sie folgendes tun:

A.'*A 

ans = 

    -2.172340517799748e+07 + 3.941808503424492e+07i 
+2

Nur wenige Menschen kennen den Unterschied zwischen "." Und "" in Matlab. Die meisten würden einfach '' 'verwenden. Gut gemacht +1 –

+0

Vielen Dank, sehr nützliche Antwort. Weißt du, wie man die A '* A Operation in Numpy erhält? –

+0

überprüfen Sie die Antwort von @hpaulj – NKN

2

Auf der Python Seite

In [488]: A=np.array([-1822.87977846-4375.93518777j , 
    ...:   3675.88618351+3824.34290883j, 
    ...:   971.68964707-2393.36758923j]) 
In [489]: A 
Out[489]: 
array([-1822.87977846-4375.93518777j, 3675.88618351+3824.34290883j, 
     971.68964707-2393.36758923j]) 
In [490]: A.conj() 
Out[490]: 
array([-1822.87977846+4375.93518777j, 3675.88618351-3824.34290883j, 
     971.68964707+2393.36758923j]) 
In [491]: A.dot(A.conj()) 
Out[491]: (57281826.560119703+0j) 
In [492]: A.dot(A) 
Out[492]: (-21723405.177997477+39418085.034244925j) 
In [497]: np.vdot(A,A) 
Out[497]: (57281826.560119703+0j) 

In Octave, als

in der anderen Antwort darauf hingewiesen,
>> A'*A 
ans = 5.7282e+07 
>> A.'*A 
ans = -2.1723e+07 + 3.9418e+07i 
>> 
+0

Vielen Dank, in der Tat möchte ich die A '* A Operation in Numpy erhalten! –

+0

Fügen Sie meinen Antworten einen '.real' hinzu, um den' 0j' Teil zu entfernen. – hpaulj

+0

plus-one Für die Python-Seite Antwort! :) +1 – NKN

1

zu erhalten Die A*A' Matlab-Operation in Numpy, können Sie tun:

np.dot(A,np.conj(A)) 

Vielen Dank!

Verwandte Themen