Effiziente NumPy-Array-Multiplikationsoperationen

NumPyNumPyBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

NumPy ist eine leistungsstarke Bibliothek für wissenschaftliches Rechnen in Python. Eines der wichtigsten Merkmale von NumPy ist seine Fähigkeit, verschiedene Arten von Array-Multiplikationen effizient durchzuführen.

In diesem Tutorial werden wir die verschiedenen Multiplikationsoperationen in NumPy erkunden, einschließlich der numpy.multiply, numpy.dot, numpy.matmul, * und @ Operatoren.

Erste Schritte

Bevor wir uns den verschiedenen Multiplikationsoperationen in NumPy widmen, öffnen wir zunächst die Python-Shell, indem wir den folgenden Befehl in der Konsole eingeben.

python3

Dann importieren wir die Bibliothek und erstellen einige Beispielarrays, die wir zur Demonstration verwenden können.

import numpy as np

## Erstellen von Beispielarrays
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

Wir haben zwei Arrays A und B erstellt, jedes mit zwei Zeilen und zwei Spalten. Lassen Sie uns jetzt die verschiedenen Multiplikationsoperationen in NumPy erkunden.

numpy.multiply

Die numpy.multiply-Funktion führt eine elementweise Multiplikation zwischen zwei Arrays durch. Die beiden Arrays müssen die gleiche Form haben. Das resultierende Array wird die gleiche Form wie die Eingabearrays haben.

C = np.multiply(A, B)

print(C)
## Ausgabe:
## array([[ 5, 12],
##       [21, 32]])

In diesem Beispiel wird jedes Element in A mit dem entsprechenden Element in B multipliziert, was zur elementweisen Multiplikation der beiden Arrays führt.

numpy.dot

Die numpy.dot-Funktion führt eine Matrizenmultiplikation zwischen zwei Arrays durch. Das erste Array muss die gleiche Anzahl an Spalten haben wie das zweite Array Zeilen. Das resultierende Array wird die gleiche Anzahl an Zeilen wie das erste Array und die gleiche Anzahl an Spalten wie das zweite Array haben.

C = np.dot(A, B)

print(C)
## Ausgabe:
## array([[19, 22],
##        [43, 50]])

In diesem Beispiel haben wir eine Matrizenmultiplikation zwischen den Arrays A und B durchgeführt. Das resultierende Array C hat zwei Zeilen und zwei Spalten, wie erwartet.

numpy.matmul

Die numpy.matmul-Funktion führt ebenfalls eine Matrizenmultiplikation zwischen zwei Arrays durch, hat jedoch leicht unterschiedliche Regeln für die Behandlung von mehrdimensionalen Arrays. Die beiden Arrays müssen die gleiche Form haben, außer für die letzten beiden Dimensionen, die übereinstimmen müssen. Wenn eines der Arrays 1-D ist, wird es durch Anhängen einer 1 an seine Form zu einer Matrix aufgestockt.

C = np.matmul(A, B)

print(C)
## Ausgabe:
## array([[19, 22],
##        [43, 50]])

In diesem Beispiel erhalten wir das gleiche Ergebnis wie mit numpy.dot. Dies liegt daran, dass unsere Arrays A und B die gleiche Form haben, sodass numpy.matmul auf die gleiche Weise wie numpy.dot funktioniert.

Und hier ist ein anderes unterschiedliches Beispiel:

## definieren Sie zwei 3-D Arrays
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])

c = np.matmul(a, b)
d = np.dot(a, b)

print(c)
## Ausgabe:
## array([[[ 31,  34],
##        [ 71,  78]],
##        [[155, 166],
##        [211, 226]]])

print(d)
## Ausgabe:
## array([[[[ 31,  34],
##         [ 43,  46]],
##        [[ 71,  78],
##         [ 99, 106]]],
##       [[[111, 122],
##         [155, 166]],
##        [[151, 166],
##         [211, 226]]]])

In diesem Beispiel führt numpy.matmul die Batch-Matrizenmultiplikation durch.

Da sowohl a als auch b 3-D Arrays sind, wird die Ausgabe von numpy.dot eine Dimension (2,2,2,2) haben. Die ersten beiden Dimensionen entsprechen den zwei Batches von 2\times2-Matrizen in a und b. Die nächsten beiden Dimensionen entsprechen dem Skalarprodukt jeder Paar von 2\times2-Matrizen in den Batches:

## das erste 2 × 2-Ergebnis
dot(a[0], b[0]) =
dot([[1, 2],
 [3, 4]],
 [[9, 10],
 [11, 12]]
= [[1*9 + 2*11, 1*10 + 2*12],
   [3*9 + 4*11, 3*10 + 4*12]]
= [[31, 34],
   [43, 46]]

* Operator

Der *-Operator führt ebenfalls eine elementweise Multiplikation zwischen zwei Arrays durch, verhält sich jedoch etwas anders als numpy.multiply. Wenn die beiden Arrays die gleiche Form haben, wird der *-Operator elementweise Multiplikation durchführen, genau wie numpy.multiply. Wenn jedoch eines der Arrays ein Skalarwert ist, wird der *-Operator Skalarmultiplikation auf jedes Element des anderen Arrays anwenden.

C = A * B
D = A * 2

print(C)
## Ausgabe:
#array([[ 5, 12],
##       [21, 32]])

print(D)
## Ausgabe:
## array([[2, 4],
##       [6, 8]])

Im ersten Beispiel erhalten wir das gleiche Ergebnis wie mit numpy.multiply. Im zweiten Beispiel führen wir Skalarmultiplikation auf jedes Element des Arrays A durch.

@ Operator

Der @-Operator führt eine Matrizenmultiplikation durch, genau wie numpy.dot und numpy.matmul. Er wurde in Python 3.5 als Abkürzung für numpy.matmul eingeführt.

C = A @ B

print(C)
## Ausgabe:
## array([[19, 22],
##       [43, 50]])

In diesem Beispiel verwenden wir den @-Operator, um eine Matrizenmultiplikation zwischen den Arrays A und B durchzuführen. Das resultierende Array C hat zwei Zeilen und zwei Spalten, genau wie bei numpy.dot und numpy.matmul.

Zusammenfassung

In diesem Tutorial haben wir die verschiedenen Multiplikationsoperationen untersucht, die in NumPy zur Verfügung stehen. Jede dieser Operationen hat ihre eigenen Regeln und Anwendungsfälle, daher ist es wichtig, die richtige für Ihre spezifische Aufgabe auszuwählen. Indem Sie diese Operationen beherrschen, können Sie effizient Array- und Matrizenmultiplikationen in Python mit NumPy durchführen.