numpy: Invalid value encountered in true_divide
Habe ich zwei numpy-arrays, und ich versuche, zu teilen, eins mit der anderen und zur gleichen Zeit, ich möchte sicherstellen, dass die Einträge, bei denen der divisor 0 ist, sollte einfach ersetzt werden mit 0.
So, ich will so etwas wie:
log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0)
Das gibt mir die Laufzeit Warnung:
RuntimeWarning: invalid value encountered in true_divide
Nun, ich wollte sehen, was Los war und ich habe die folgenden:
xx = np.isfinite(diff_images)
print (xx[xx == False])
xx = np.isfinite(b_0)
print (xx[xx == False])
Jedoch sind beide leer zurück-arrays, was bedeutet, dass alle Werte in den arrays sind endlich. Also, ich bin nicht sicher, wo der ungültigen Wert kommt. Ich gehe davon aus, dass die überprüfung b_0 > 0 in der np.wo die Funktion kümmert sich um die Division durch 0.
Form von zwei arrays (96, 96, 55, 64) und (96, 96, 55, 1)
- Warum würde
xx
werdenFalse
und ein dict? - Ich denke, isfinite gibt einen boolean-array. Also, ich bin auf der Suche nach Orten, wo die Werte sind NICHT begrenzt.
- Versuchen
[x for x in xx if x == False]
. Sie sind nur versuchen, Holen die SchlüsselFalse
- Du meinst wie diese: print (xx[x for x in xx falls x == False]). Dies wirft einen syntax-Fehler.
- Verwandte denke ich mal: stackoverflow.com/q/26248654/846892
- Danke für den link, aber ich habe dieses deckte sich mit der np.wo Funktion, wo die division sollte nur passieren, wenn der divisor größer als 0,
- Für was es Wert ist, können Sie "invertiert" ein boolean-array mit der
~
Betreiber. E. g.print your_data[~np.isfinite(your_data)]
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie möglicherweise eine
NAN
,INF
oderNINF
schweben irgendwo Rum. Versuchen Sie dies:Wenn einer oder beide von denen gibt
False
, das ist wahrscheinlich die Ursache des runtime-Fehlers.np.where
, aber wenn ich wiederholen Sie den exakten gleichen Ausdruck ein zweites mal bekomme ich keine Warnung.