Foto von Vlado Paunovic
NumPy ist eine leistungsstarke Python-Bibliothek, die eine große Sammlung mathematischer Funktionen enthält und die Erstellung von Matrizen und mehrdimensionalen Arrays unterstützt, auf die diese mathematischen Funktionen angewendet werden können.
In diesem kurzen Tutorial lernen Sie, wie Sie einige der grundlegendsten Matrixoperationen mit NumPy durchführen.
Matrizen und Arrays in NumPy
In NumPy wird eine Matrix als spezialisiertes Array definiert, das streng zweidimensional ist und seine Zweidimensionalität nach der Anwendung mathematischer Operationen beibehält. Eine Matrix dieses Typs kann mit dem np.matrix
Klasse, jedoch empfiehlt NumPy die Verwendung dieser Klasse nicht mehr, da sie in Zukunft möglicherweise entfernt wird. Die von NumPy empfohlene Various ist die Verwendung des N-dimensionalen Array-Typs, ndarray
.
Der Hauptunterschied zwischen einem Ndarray und einer Matrix in NumPy besteht darin, dass ersteres jede beliebige Dimensionalität haben kann und seine Verwendung nicht auf zweidimensionale Operationen beschränkt ist.
Daher konzentrieren wir uns in diesem Tutorial auf die Implementierung mehrerer grundlegender Matrixoperationen auf zweidimensionalen Arrays, die mit erstellt wurden np.ndarray
Erstellen von NumPy-Arrays
Lassen Sie uns zunächst das NumPy-Paket importieren und dann zwei zweidimensionale Arrays erstellen, die jeweils aus zwei Zeilen und drei Spalten bestehen. Diese Arrays werden in den folgenden Beispielen dieses Tutorials verwendet:
# Import NumPy package deal
import numpy as np
# Create arrays
a1 = np.array(((0, 1, 0), (2, 3, 2)))
a2 = np.array(((3, 4, 3), (5, 6, 5)))
Der form
Attribut ermöglicht uns, die Dimensionen des Arrays zu bestätigen:
# Print one of many arrays
print('Array 1:', 'n', a1, 'n Form: n’, a1.form)
Ausgabe:
Array 1:
((0 1 0)
(2 3 2))
Form: (2, 3)
Grundlegende Array-Operationen
NumPy bietet eigene Funktionen zur elementweisen Addition, Subtraktion, Division und Multiplikation von Arrays. Darüber hinaus nutzt Numpy auch die arithmetischen Operatoren von Python, indem es deren Funktionalität erweitert, um elementweise Array-Operationen durchzuführen.
Beginnen wir mit der elementweisen Addition zwischen den Arrays a1
Und a2
als Beispiel.
Die elementweise Addition zweier Arrays kann durch die Verwendung von np.add
Funktion oder die überlastete +
Operator:
# Utilizing np.add
func_add = np.add(a1, a2)
# Utilizing the + operator
op_add = a1 + a2
Durch Ausdrucken der Ergebnisse kann bestätigt werden, dass beide die gleiche Ausgabe erzeugen:
# Print outcomes
print('Perform: n', func_add, 'nn', 'Operator: n', op_add)
Ausgabe:
Perform:
((3 5 3)
(7 9 7))
Operator:
((3 5 3)
(7 9 7))
Wenn wir jedoch die Zeit messen müssten, könnten wir einen kleinen Unterschied erkennen:
import numpy as np
import timeit
def func():
a1 = np.array(((0, 1, 0), (2, 3, 2)))
a2 = np.array(((3, 4, 3), (5, 6, 5)))
np.add(a1, a2)
def op():
a1 = np.array(((0, 1, 0), (2, 3, 2)))
a2 = np.array(((3, 4, 3), (5, 6, 5)))
a1 + a2
# Timing the capabilities over 100000 iterations
func_time = timeit.timeit(func, quantity=100000)
op_time = timeit.timeit(op, quantity=100000)
# Print timing outcomes
print('Perform:', func_time, 'n', 'Operator:', op_time)
Ausgabe:
Perform: 0.2588757239282131
Operator: 0.24321464297827333
Hier kann man sehen, dass die NumPy np.add
Funktion ist etwas langsamer als die +
Operator. Dies liegt hauptsächlich daran, dass die Funktion add eine Typprüfung einführt, um alle array_like Eingaben (wie Pay attention) in Arrays, bevor die Additionsoperation ausgeführt wird. Dies führt wiederum zu einem zusätzlichen Rechenaufwand gegenüber der +
Operator.
Eine solche Maßnahme macht jedoch auch die np.add
Funktion weniger fehleranfällig. Zum Beispiel die Anwendung np.add
für Eingänge vom Typ record
funktioniert immer noch (zB np.add((1, 1), (2, 2))
), während die Anwendung der +
Operator führt zur Listenverkettung.
Ähnlich verhält es sich bei der elementweisen Subtraktion (mit np.subtract
oder -
), Division (mit np.divide
oder /
) und Multiplikation (mit np.multiply
oder *
) führen die NumPy-Funktionen eine Typprüfung durch, was zu einem geringen Rechenaufwand führt.
Zu den weiteren Operationen, die nützlich sein können, gehören das Transponieren und Multiplizieren von Arrays.
Die Matrixtransposition führt zu einer orthogonalen Rotation der Matrix und kann erreicht werden durch np.transpose
Funktion (die eine Typprüfung beinhaltet) oder die .T
Attribut:
# Utilizing np.transpose
func_a1_T = np.transpose(a1)
# Utilizing the .T attribute
att_a1_T = a1.T
Die Matrixmultiplikation kann durchgeführt werden mit dem np.dot
Funktion oder die @
Operator (letzterer implementiert den np.matmul
Funktion ab Python 3.5):
# Utilizing np.dot
func_dot = np.dot(func_a1_T, a2)
# Utilizing the @ operator
op_dot = func_a1_T @ a2
Bei der Arbeit mit 2-dimensionalen Arrays np.dot
Und np.matmul
Die Ausführung ist identisch und beide umfassen eine Typprüfung.
Zusätzliche Ressourcen
Stefania CristinaPhD, ist Dozentin am Institut für System- und Steuerungstechnik der Universität Malta. Ihre Forschungsinteressen liegen in den Bereichen Laptop Imaginative and prescient und maschinelles Lernen.