Rückgabe von 0 bei Division durch null
Ich versuche, führen Sie ein element-Weise Division in python, aber, wenn eine null Auftritt, muss ich den Quotienten zu nur null sein.
Beispiel:
array1 = np.array([0, 1, 2])
array2 = np.array([0, 1, 1])
array1 / array2 # should be np.array([0, 1, 2])
Konnte ich immer nur mit einer for-Schleife über meine Daten, aber um wirklich nutzen numpy ' s Optimierungen, muss ich die teilen-Funktion return 0 nach Division durch null-Fehler nicht ignoriert, sondern die Fehler.
Es sei denn, ich bin fehlt etwas, es scheint nicht numpy.seterr() können Rückgabewerte auf Fehler. Hat jemand irgendwelche anderen Vorschläge hast, wie ich bekommen konnte und das beste aus der numpy während der Einstellung meiner eigenen Division durch null-Fehler-handling?
- In meinem python-version (2.7.11 Python |Continuum Analytics, Inc.) das ist genau die Ausgabe, die Sie erhalten. Mit einer Warnung.
- Die knappste Antwort richtig ist stackoverflow.com/a/37977222/2116338
Du musst angemeldet sein, um einen Kommentar abzugeben.
In numpy v1.7+ können Sie die Vorteile von "wo" option für die ufuncs. Sie können Dinge tun, in einer Linie, und Sie nicht haben, um mit der errstate Kontext-manager.
In diesem Fall, es macht die Kluft Berechnung überall 'wo', b nicht null ist. Wenn b gleich null ist, dann bleibt es unverändert, von was auch immer Wert, den Sie ursprünglich gab es in den " out " - argument.
Gebäude auf @Franck Dernoncourt Antwort, die Festsetzung -1 /0:
True
undFalse
in numpy-arrays:print ~ np.array([ True, False, False ])
.c[ ~ np.isfinite( c )] = 0
bedeutet: hier finden Sie die Positionen, an denenc
endlich ist, invertiert diese, um NICHT endlich mit~
, und legen Sie die nicht-finite-Werte auf 0. Siehe auch stackoverflow.com/search?q=[numpy]+"boolean+indexing"Gebäude auf die anderen Antworten, und die Verbesserung auf:
0/0
Handhabung durch hinzufügeninvalid='ignore'
zunumpy.errstate()
numpy.nan_to_num()
zu konvertierennp.nan
zu0
.Code:
Ausgabe:
0/0
sowie1/0
Fehler.One-liner (wirft die Warnung)
Versuchen, es zu tun in zwei Schritten. Division erste, dann ersetzen.
Den
numpy.errstate
Zeile ist optional, und nur verhindert, dass numpy aus, erzählen Sie über die "Fehler" von der Division durch null, da Sie bereits die Absicht dazu zu haben, und der Umgang mit diesem Fall.np.errstate(divide='ignore'):
divide='warn'
könnte auch nützlich sein, wenn s/er wollte noch mitgeteilt werden.denominator
ist SkalarKönnen Sie auch ersetzen Sie basiert auf
inf
nur, wenn das array dtypes sind Schwimmer, als pro diese Antwort:Einer Antwort, die ich gefunden Suche eine Verwandte Frage war, die die Ausgabe manipulieren, je nachdem, ob der Nenner null war oder nicht.
Angenommen
arrayA
undarrayB
initialisiert wurden, aberarrayB
hat einige Nullen. Wir könnten Folgendes tun, wenn wir ausrechnen wollenarrayC = arrayA /arrayB
sicher.In diesem Fall, wenn ich eine Division durch null in einer der Zellen, ich habe die Zelle gleich
myOwnValue
, das wäre in diesem Fall nullFußnote: Im Nachhinein, diese Zeile ist überflüssig sowieso, da
arrayC[i]
instanziiert wird zu null. Aber wenn der der Fall waren, dassmyOwnValue != 0
dieser Vorgang würde etwas tun.Einer anderen Lösung erwähnenswert :