2016-07-24 102 views
0

Ich benutze Python numpy für Matrixoperationen. Die Berechnung der Identitätsmatrix führt zu unerwarteten Ergebnissen - Die Standardidentitätsmatrix wird nicht abgerufen.Python numpy - Geben einer Identitätsmatrix mit nicht-diognalen Elementen ungleich

R0 = matrix([ 
    [0.02187598, 0.98329681, -0.18068986], 
    [0.99856708, -0.01266115, 0.05199501], 
    [0.04883878, -0.18156839, -0.9821648] 
]); 

print R0.dot(R0.I) 

# prints [[ 1.00000000e+00 0.00000000e+00 5.55111512e-17] 
#   [ 0.00000000e+00 1.00000000e+00 0.00000000e+00] 
#   [ -5.55111512e-17 0.00000000e+00 1.00000000e+00]] 
+0

Gibt es einen besonderen Grund, warum Sie keine NumPy-Arrays anstelle der Matrixtypen verwenden? – Divakar

+0

Weil ich gegoogelt habe, und das sind diejenigen, die ich zuerst gefunden habe. Wenn numpy Arrays korrekte Ergebnisse liefern, kann ich diese verwenden. Kein Problem. – user3834119

+0

Die Verwendung eines numpligen Arrays anstelle einer 'Matrix' wird nicht helfen. Sie sehen einen normalen Gleitkommazahlfehler. Im Allgemeinen wird das Ergebnis der numerischen Berechnung von "R0.dot (R0.I)" nicht genau die Identitätsmatrix sein. –

Antwort

2

Das Problem ist, dass, obwohl mathematisch das Ergebnis von Punkt (R, RI) gleich I infolge der numerischen Fehler in den Gleitkommazahlen, numpy etwas ganz in der Nähe ich zurück, aber nicht genau gleich zu ihm.

Die Werte mit E-17 sind sehr nahe Annäherungen von 0.

Wenn Sie die genaue Identität Matrix erzeugen wollen, nur numpy.identity verwenden:

numpy.identity (3)