NumPy
Was ist NumPy?
NumPy ist eine Open-Source-Bibliothek für mathematische und wissenschaftliche Berechnungen für Python-Programmieraufgaben. Der Name NumPy ist eine Abkürzung für Numerical Python. Die NumPy-Bibliothek bietet eine Sammlung mathematischer Funktionen auf hoher Ebene, einschließlich Unterstützung für mehrdimensionale Arrays, maskierte Arrays und Matrizen. NumPy enthält auch verschiedene logische und mathematische Funktionen für diese Arrays, wie zum Beispiel Formmanipulation, Sortierung, Auswahl, lineare Algebra, statistische Operationen, Zufallszahlengenerierung und diskrete Fourier-Transformationen.
Wie bei jeder Programmierbibliothek muss NumPy nur zu einer vorhandenen Python-Installation hinzugefügt werden, und Programmierer können problemlos Python-Code schreiben, der Aufrufe und den Datenaustausch mit NumPy-Funktionen ermöglicht. Die NumPy-Bibliothek wurde erstmals 2006 veröffentlicht. Heute wird die Open-Source-Bibliothek von der wissenschaftlichen Computer-Community unterstützt und ist derzeit über GitHub verfügbar. Die Entwicklung der NumPy-Bibliothek ist aktiv und wird fortgesetzt.
Wie unterscheiden sich NumPy-Arrays von Python-Listen?
Einfach ausgedrückt eignet sich eine Python-Liste am besten für die Datenspeicherung und ist nicht ideal für mathematische Aufgaben geeignet, während eine NumPy-Liste mathematikintensive Aufgaben problemlos unterstützen kann.
Python bietet eine grundlegende Datenstruktur, die als Liste bezeichnet wird. Eine Python-Liste unterstützt eine veränderbare – oder mutable – geordnete Abfolge von Datenelementen oder Werten, die als Elemente bezeichnet werden. Eine einzelne Liste kann auch viele verschiedene Datentypen enthalten. Dadurch eignen sich Listen gut zum Speichern mehrerer Datenelemente als eine einzige Variable – wie zum Beispiel Kundenkontaktinformationen und Kontonummern. Listen sind jedoch potenziell ineffizient, da sie viel Speicherplatz beanspruchen und Probleme bei der Verarbeitung mathematischer Operationen mit unterschiedlichen Elementtypen verursachen.
Im Vergleich dazu basiert NumPy auf der Idee eines homogenen Datenarrays. Obwohl ein NumPy-Array verschiedene Datentypen angeben und unterstützen kann, sollte jedes in NumPy erstellte Array nur einen gewünschten Datentyp verwenden – für einen anderen Datentyp kann ein anderes Array erstellt werden. Dieser Ansatz erfordert weniger Speicher und ermöglicht eine effizientere Systemleistung bei der Verarbeitung mathematischer Operationen an Array-Elementen.
Was sind ndarrays und wie werden sie verwendet?
Die primäre Datenstruktur in NumPy ist das N-dimensionale Array – auch als ndarray oder einfach als Array bezeichnet. Jedes ndarray ist ein Array mit fester Größe, das im Speicher gehalten wird und den gleichen Datentyp wie Ganzzahlen oder Gleitkommazahlen enthält.
Ein ndarray kann bis zu drei Dimensionen besitzen, einschließlich Array-Länge, -Breite und -Höhe oder -Ebenen. Ndarrays verwenden das shape-Attribut, um ein Tupel (eine geordnete Zahlenfolge) zurückzugeben, das die Dimensionen des Arrays festlegt. Der im Array verwendete Datentyp wird durch das dtype-Attribut angegeben, das dem Array zugewiesen ist. Dies können zum Beispiel Ganzzahlen, Zeichenketten und Gleitkommazahlen sein.
Als einfaches Beispiel erstellt der folgende Codeausschnitt ein Array und verwendet die Attribute shape und dtype, um ein zweidimensionales Array mit zwei Zeilen zu je drei Elementen im Array zu rendern, die jeweils 4-Byte-Ganzzahlen (32-Bit) enthalten sollen:
g = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
type(g)
<type 'numpy.ndarray'>
g.shape
(2, 3)
g.dtype
dtype('int32')
Mit verschiedenen NumPy-Funktionen können ganz einfach Arrays erstellt werden, die entweder leer sind oder mit Nullen oder Einsen vorbelegt sind. Verschiedene NumPy-Arrays können auch vertikal oder horizontal gestapelt (kombiniert) werden.
Ein bestehendes ndarray kann indiziert werden, um auf seinen Inhalt zuzugreifen. Um beispielsweise die zweite Zeile und die dritte Spalte des obigen Arrays zu lesen, versuchen Sie es mit der Indizierungsfunktion wie:
g[1,2]
Der Rückgabewert sollte 6 sein. Denken Sie daran, dass die erste Zeile und Spalte [0,0] ist, sodass die zweite Zeile und dritte Spalte [1,2] ist.
Nach der Erstellung können Programmierer mathematische Operationen mit dem Inhalt eines ndarrays durchführen. Zu den einfachen mathematischen Funktionen gehören beispielsweise:
- Addition: Addiert die Elemente eines Arrays: numpy.add(x,y)
- Subtraktion: Subtrahiert die Elemente eines Arrays: numpy.subtract(x,y)
- Multiplikation: Multipliziert die Elemente eines Arrays: numpy.multiply(x,y)
- Division: numpy.divide(x,y)
- Potenz: numpy.power(x,y)
- Matrixmultiplikation: numpy.matmul(x,y)
Im folgenden einfachen Beispiel werden zwei eindimensionale Arrays erstellt und dann die Elemente eines Arrays zu den Elementen eines zweiten Arrays addiert:
array1 = numpy.array([1, 2, 3])
array2 = numpy.array([4, 5, 6])
result = numpy.add(array1, array2)
print(result)
Die Ausgabe der Addition lautet dann [5 7 9].
Über 60 grundlegende mathematische Funktionen und viele andere komplexe Funktionen unterstützen Logik, Algebra, Trigonometrie und Analysis. Die NumPy-Dokumentation enthält detaillierte Listen der verfügbaren Funktionen und Codebeispiele, anhand derer Programmierer die NumPy-Funktionen erlernen und implementieren können.
Häufige NumPy-Anwendungen und -Verwendungszwecke
Die mathematische Bibliothek NumPy kann von jedem Softwareentwickler (mit beliebigem Erfahrungsniveau) verwendet werden, der komplexe numerische Rechenfunktionen in seine Python-Codebasis integrieren möchte. NumPy wird auch routinemäßig in vielen verschiedenen datenwissenschaftlichen, maschinellen Lern- (ML) und wissenschaftlichen Python-Softwarepaketen verwendet, darunter die folgenden:
- Matplotlib
- Pandas
- scikit-image
- scikit-learn
- SciPy
NumPy wird regelmäßig in einer Vielzahl von Anwendungsfällen eingesetzt, darunter:
- Datenmanipulation und -analyse. NumPy kann zur Datenbereinigung, -transformation und -aggregation verwendet werden. Die Daten können dann durch verschiedene mathematische NumPy-Operationen wie statistische Analyse, Fourier-Analyse und lineare Algebra verarbeitet werden – allesamt unerlässlich für fortgeschrittene Datenanalyse und datenwissenschaftliche Aufgaben.
- Wissenschaftliches Rechnen. NumPy bewältigt fortgeschrittene mathematische Operationen wie Matrixmultiplikation, Eigenwertberechnung und Differentialgleichungen. Dadurch ist NumPy besonders wertvoll für eine Vielzahl von Simulations-, Modellierungs-, Visualisierungs-, Rechenverarbeitungs- und anderen wissenschaftlichen Rechenaufgaben.
- Maschinelles Lernen. ML-Aufgaben sind mathematikintensiv, und ML-Bibliotheken – wie TensorFlow und scikit-learn – verwenden NumPy ohne weiteres für mathematische Berechnungen, die zur Unterstützung von ML-Algorithmen und Modelltraining erforderlich sind.
- Signal- und Bildverarbeitung. Signale und Bilder können leicht als Datenfelder dargestellt werden, und NumPy kann die erforderlichen Tools bereitstellen, um wichtige Verarbeitungsaufgaben an diesen Daten für Zwecke wie Verbesserung und Filterung durchzuführen.
Grenzen von NumPy
Obwohl NumPy einige bemerkenswerte Vorteile für Entwickler mathematischer Software bietet, müssen auch einige Einschränkungen berücksichtigt werden. Zu den häufigsten Nachteilen gehören:
- Geringere Flexibilität. Der Fokus auf numerische und homogene Datentypen ist der Schlüssel zur Leistung und Effizienz von NumPy, kann aber auch die Flexibilität von NumPy im Vergleich zu anderen Storage-Array-Mechanismen einschränken, bei denen heterogene Datentypen unterstützt werden müssen. Darüber hinaus bietet NumPy keine Unterstützung für fehlende Werte, sodass eine sorgfältige Validierung und Überprüfung des Datensatzes erforderlich ist.
- Nicht-numerische Datentypen. NumPy kann viele verschiedene Datentypen unterstützen, aber sein Hauptaugenmerk liegt auf numerischen Datentypen, wie zum Beispiel Gleitkommazahlen, und nicht-numerischen Datentypen, wie zum Beispiel Textzeichenfolgen, die im Vergleich zu anderen Array-Storage-Mechanismen wie Python-Listen möglicherweise nur wenig von der NumPy-Array-Speicherung profitieren.
- Forderungen nach Veränderung. NumPy- und Python-Listen sind beide veränderbar – Array-Inhalte können angehängt, erweitert und kombiniert werden. NumPy ist jedoch bei der Bearbeitung solcher Aufgaben ineffizient, und Routinen, die zum Ändern, Hinzufügen, Kombinieren oder Löschen von Daten innerhalb des Arrays entwickelt wurden, können aufgrund der Art und Weise, wie NumPy Speicher zuweist und verwendet, Leistungseinschränkungen unterliegen.
Letztendlich bietet NumPy eine leistungsstarke Plattform für wissenschaftliche Berechnungen, ist jedoch kein Ersatz für alle Array-Programmieraufgaben. Softwaredesigner müssen die Art und die Anforderungen des Arrays sorgfältig prüfen, bevor sie sich für NumPy oder Python-Listen oder andere Array-Mechanismen entscheiden.
Installation und Import von NumPy
Die einzige Voraussetzung für NumPy ist eine Python-Distribution. Die Anaconda-Distribution von Python enthält bereits Python und NumPy und ist möglicherweise einfacher in der Anwendung für Benutzer, die gerade erst mit NumPy und wissenschaftlichen Rechenprojekten beginnen.
Für Benutzer, die bereits eine Version von Python verwenden, kann NumPy mit Conda (einem Tool zur Verwaltung von Paketen, Abhängigkeiten und Umgebungen) oder Pip (einem Paketmanager für Python-Module) installiert werden. Einfache Installationsbefehle für jeden Paketmanager sehen wie folgt aus:
conda install numpy
oder
pip install numpy
Nach der Installation kann die NumPy-Bibliothek mit dem Python-Importbefehl zur Python-Codebasis hinzugefügt oder mit dieser verbunden werden, zum Beispiel mit:
import numpy
Der Modulname (numpy in diesem Fall) kann auch über den Importbefehl umbenannt werden, um den Modulnamen relevanter, lesbarer oder leichter referenzierbar zu machen. Um NumPy beispielsweise als np zu importieren, verwenden Sie den as-Switch wie folgt:
import numpy as np
Daher können alle Aufrufe von NumPy stattdessen mit der Abkürzung np erfolgen.
Detaillierte Anweisungen zur Installation, zum Import und zur Verwendung von NumPy finden Sie in der NumPy-Dokumentation, die auf NumPy verfügbar ist.