HOWTO · NumPy
Elementweise Division in Python NumPy
Es gibt zwei Hauptmethoden, die verwendet werden können, um eine elementweise Division von NumPy-Arrays in Python durchzuführen, die Funktion numpy.divide() und den Operator /.
Auf dieser Seite
Um jeweils entsprechende Werte in NumPy-Arrays zu dividieren, verwenden Sie entweder numpy.divide(x1, x2) oder x1 / x2. Beide führen eine elementweise echte Division aus und geben ein Array zurück. Verwenden Sie die Funktionsform, wenn optionale Argumente wie out oder where Ihnen helfen, das Ergebnis zu steuern.
numpy.divide() verwenden
numpy.divide() erwartet zuerst den Dividend und dann den Divisor. Bei Arrays mit übereinstimmenden Formen wird jeder Wert im ersten Array durch den Wert an derselben Position im zweiten Array geteilt. Weisen Sie das zurückgegebene Array einer Variablen zu, wenn Sie es später weiterverwenden möchten. Das Argument out ist optional: Lassen Sie es weg, erstellt NumPy ein Ergebnis und gibt es zurück. Alternativ können Sie ein vorhandenes Array mit kompatibler Form und kompatiblem Datentyp übergeben, um die Ergebnisse darin abzulegen.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
numerators = np.array([12, 18, 24])
denominators = np.array([3, 6, 8])
by_function = np.divide(numerators, denominators)
destination = np.array([0.0, 0.0, 0.0])
np.divide(numerators, denominators, out=destination)
by_operator = numerators / denominators
print(by_function)
print(by_operator)
print(destination)
[4. 3. 3.]
[4. 3. 3.]
[4. 3. 3.]
Beim ersten Funktionsaufruf wird out weggelassen, sodass ein neues Array erstellt und zurückgegeben wird. Der zweite Aufruf schreibt in destination, das mit der Form und dem Datentyp des Ergebnisses erstellt wurde. Der Operator verwendet dieselben Eingaben, daher enthalten alle drei Arrays dieselben Quotienten. Die Eingaben sind Ganzzahlen, während die echte Division Gleitkommawerte ergibt.
Den /-Operator verwenden
Für die meisten Ausdrücke ist / die kürzeste und klarste Möglichkeit, NumPy-Arrays elementweise zu dividieren. Schreiben Sie result = numerators / denominators; die Operanden werden positionsweise ausgewertet. Das resultierende Array können Sie einer Variablen zuweisen, indizieren oder an eine andere NumPy-Operation übergeben. Wenn ein Operand ein Skalar ist oder die beiden Arrays kompatible Formen haben, wendet NumPy seine Regeln für Array-Arithmetik an.
Der Operator ist keine eigene Ganzzahldivision: Bei Ganzzahl-Arrays führt / eine echte Division aus, deren Quotienten als Gleitkommawerte dargestellt werden. Das unterscheidet sich von Pythons //, das eine Abrundungsdivision anfordert. Wählen Sie den Operator passend zur gewünschten Operation und verwenden Sie // nicht, wenn Sie gebrochene Quotienten benötigen.
Broadcasting, Datentypen und Null als Divisor
Arrays mit derselben Form dividieren unmittelbar die jeweils entsprechenden Elemente. NumPy kann auch kompatible Formen per Broadcasting verarbeiten: Die Dimensionen werden von rechts verglichen, und jedes Dimensionspaar muss gleich sein oder eine Dimension muss den Wert 1 haben. So kann beispielsweise ein zweidimensionales Array der Form (2, 3) durch ein eindimensionales Array der Form (3,) dividiert werden; dabei wird jeder Divisor auf eine Zeile angewendet. Formen, die diese Broadcasting-Regel nicht erfüllen, lassen sich nicht elementweise dividieren. Prüfen Sie bei einem Formfehler array.shape für beide Operanden.
Der Datentyp des Ergebnisses hängt von den Eingabedatentypen und der Divisionsoperation ab. Insbesondere ergeben Ganzzahl-Eingaben für / oder numpy.divide() Resultate einer echten Division; die Quotienten werden also nicht auf Ganzzahlen abgeschnitten. Wenn ein späterer Verarbeitungsschritt einen bestimmten Datentyp erfordert, konvertieren Sie den Datentyp bewusst nach der Division und bedenken Sie, dass dabei Nachkommastellen verloren gehen können.
Bei echter Division erzeugen sowohl / als auch numpy.divide() mit Ganzzahl-Eingaben Gleitkommaergebnisse. Ein Divisor von null kann daher bei einem Zähler ungleich null Unendlich oder bei 0 / 0 nan ergeben, jeweils mit einer Laufzeitwarnung. Dasselbe gilt für Gleitkomma-Eingaben. Dieser Artikel behandelt diese Formen der echten Division; die Abrundungsdivision mit // ist eine andere Operation und verhält sich nicht auf diese Weise. Sollen Positionen mit einem Divisor von null ausgelassen werden, initialisieren Sie zuerst ein Ausgabe-Array und verwenden Sie dann numpy.divide(a, b, out=result, where=b != 0). An Positionen, an denen die Bedingung falsch ist, bleiben die initialisierten Werte erhalten. Wählen Sie einen Füllwert, der für die weitere Berechnung sinnvoll ist, und legen Sie separat fest, wie Sie mit den ausgelassenen Positionen umgehen.
Eine Divisionsmethode auswählen
Verwenden Sie / für einen direkten Ausdruck, wenn Sie einen knappen elementweisen Quotienten benötigen. Verwenden Sie numpy.divide(), wenn die Funktionsargumente hilfreich sind, insbesondere out für ein vorhandenes Ausgabe-Array oder where, um die zu berechnenden Positionen auszuwählen. Prüfen Sie bei beiden Formen, ob die Operanden kompatible Formen haben, und entscheiden Sie, wie Null als Divisor für die Datentypen Ihrer Daten behandelt werden soll. So lässt sich der Code leichter an Vektoren, Matrizen und per Broadcasting kompatible Eingaben anpassen.