2016-07-15 8 views
1

Die Zeile scipy.linalg.logm(np.diag([-1.j, 1.j])) erzeugt einen Fehler mit scipy 0.17.1, während der gleiche Aufruf an Matlab, logm(diag([-i, i])), gültige Ausgabe erzeugt. Ich habe bereits eine bugreport on github eingereicht, jetzt bin ich hier, um nach einem Workaround zu fragen. Gibt es irgendeine Implementierung von logm in Python, das kann logm(np.diag([-1.j, 1.j]))?Scipy.linalg.logm erzeugt einen Fehler, wo Matlab nicht

EDIT: Der Fehler ist in scipy 0.18.0rc2 behoben, so dass dieser Thread geschlossen ist.

Antwort

1

Ich weiß nicht genug über die Berechnung, um den Fehler zu verstehen. Aber es hat etwas zu tun, Division durch Null - wahrscheinlich im realen Teil.

Ersetzen des realen Null Teil des Arrays mit einem kleinen Wert arbeitet:

In [40]: linalg.logm(np.diag([1e-16-1.j,1e-16+1.j])) 
Out[40]: 
array([[ 5.00000000e-33-1.57079633j, 0.00000000e+00+0.j  ], 
     [ 0.00000000e+00+0.j  , 5.00000000e-33+1.57079633j]]) 

So ist der kleine Realteil mit

entfernt werden kann
In [47]: linalg.logm(np.diag([1e-16-1.j,1e-16+1.j])).imag*1j 
Out[47]: 
array([[-0.-1.57079633j, 0.+0.j  ], 
     [ 0.+0.j  , 0.+1.57079633j]]) 
+0

Danke. Wie in meiner Bearbeitung erwähnt, ist der Fehler in der neuen scipy Release-Kandidat behoben, aber Ihre Abhilfe ist in Ordnung. – HeinzKurt