Aus dem Englischen übersetzt

NumPy ist eine Open-Source-Python-Bibliothek, die Unterstützung für große, mehrdimensionale Arrays und Matrizen sowie eine Sammlung hochrangiger mathematischer Funktionen bietet. Sie ist ein grundlegendes Werkzeug für wissenschaftliches Rechnen und bildet die Basis für viele Bibliotheken der Datenwissenschaft und des maschinellen Lernens.

NumPy (ausgesprochen „NUM-py“) ist eine Bibliothek für die Programmiersprache Python, die Unterstützung für große, mehrdimensionale Arrays und Matrizen sowie eine Sammlung von mathematischen Funktionen auf hoher Ebene bietet, um mit diesen Arrays zu arbeiten. Es ist Open-Source-Software mit vielen Mitwirkenden und wird finanziell von NumFOCUS unterstützt. NumPy ist eine Kernkomponente des wissenschaftlichen Python-Ökosystems und bildet die Grundlage für Bibliotheken wie SciPy und Matplotlib. Es wird in Bereichen von der Datenanalyse bis hin zu maschinellem Lernen und Deep Learning häufig eingesetzt.

Der Vorgänger von NumPy, Numeric, wurde ursprünglich von Jim Hugunin mit Beiträgen mehrerer anderer Entwickler erstellt. Im Jahr 2005 entwickelte Travis Oliphant NumPy, indem er Funktionen des konkurrierenden Numarray in Numeric integrierte und umfangreiche Änderungen vornahm. Die erste Version, NumPy 1.0, erschien 2006. Seitdem hat sich NumPy weiterentwickelt, um Python 3 zu unterstützen (ab Version 1.5.0 im Jahr 2011) und ist zu einem Standardwerkzeug für numerisches Rechnen in Python geworden.

Geschichte

Die Programmiersprache Python wurde ursprünglich nicht für numerisches Rechnen entwickelt, zog jedoch früh die Aufmerksamkeit der wissenschaftlichen und technischen Gemeinschaft auf sich. Im Jahr 1995 wurde die Interessengruppe matrix-sig gegründet, mit dem Ziel, ein Paket für Array-Berechnungen zu definieren. Unter ihren Mitgliedern war auch der Python-Designer und -Betreuer Guido van Rossum, der die Syntax von Python, insbesondere die Indizierungssyntax, erweiterte, um Array-Berechnungen zu erleichtern.

Eine Implementierung eines Matrixpakets wurde von Jim Fulton abgeschlossen und dann von Jim Hugunin erweitert, um mehrdimensionale Arrays zu unterstützen. Hugunin nannte es Numeric (auch bekannt als „Numerical Python extensions“ oder „NumPy“). Hugunin, ein Doktorand am Massachusetts Institute of Technology (MIT), trat 1997 der Corporation for National Research Initiatives (CNRI) bei, um an JPython zu arbeiten, und überließ Paul Dubois vom Lawrence Livermore National Laboratory (LLNL) die Rolle des Betreuers. Weitere frühe Mitwirkende waren David Ascher, Konrad Hinsen und Travis Oliphant.

Ein neues Paket namens Numarray wurde als flexiblerer Ersatz für Numeric geschrieben. Es hatte schnellere Operationen für große Arrays, war jedoch bei kleinen langsamer, sodass eine Zeit lang beide Pakete parallel für verschiedene Anwendungsfälle verwendet wurden. Die letzte Version von Numeric (v24.2) wurde am 11. November 2005 veröffentlicht, während die letzte Version von numarray (v1.5.2) am 24. August 2006 erschien. Es gab den Wunsch, Numeric in die Python-Standardbibliothek aufzunehmen, aber Guido van Rossum entschied, dass der Code in seinem damaligen Zustand nicht wartbar sei.

Anfang 2005 wollte Travis Oliphant die Gemeinschaft um ein einziges Array-Paket vereinen. Er portierte die Funktionen von Numarray auf Numeric und veröffentlichte das Ergebnis 2006 als NumPy 1.0. Dieses neue Projekt war Teil von SciPy, wurde jedoch abgetrennt und als NumPy bezeichnet, um die Installation des großen SciPy-Pakets nur für ein Array-Objekt zu vermeiden. Im Jahr 2011 begann PyPy mit der Entwicklung einer Implementierung der NumPy-API für PyPy; Stand 2023 ist diese noch nicht vollständig mit NumPy kompatibel.

Funktionen

NumPy zielt auf die CPython-Referenzimplementierung von Python ab, die ein nicht optimierender Bytecode-Interpreter ist. Mathematische Algorithmen, die für diese Version von Python geschrieben wurden, laufen oft deutlich langsamer als kompilierte Äquivalente, da Compiler-Optimierungen fehlen. NumPy begegnet dieser Langsamkeit teilweise, indem es mehrdimensionale Arrays sowie Funktionen und Operatoren bereitstellt, die effizient auf Arrays arbeiten. Die Verwendung von NumPy erfordert, dass ein Teil des Codes, insbesondere innere Schleifen, umgeschrieben wird, um Arrays zu verwenden.

Die Verwendung von NumPy in Python bietet eine Funktionalität, die mit MATLAB vergleichbar ist, da beide interpretiert werden und beide es dem Benutzer ermöglichen, schnelle Programme zu schreiben, solange die meisten Operationen auf Arrays oder Matrizen statt auf Skalaren arbeiten. MATLAB verfügt über eine große Anzahl zusätzlicher Toolboxen, insbesondere Simulink, während NumPy intrinsisch in Python integriert ist, eine modernere und vollständigere Programmiersprache. Ergänzende Python-Pakete sind verfügbar: SciPy fügt mehr MATLAB-ähnliche Funktionalität hinzu, und Matplotlib bietet MATLAB-ähnliche Plotting-Funktionen. Obwohl MATLAB Operationen mit dünnbesetzten Matrizen durchführen kann, kann NumPy allein dies nicht und erfordert die Verwendung der scipy.sparse-Bibliothek. Intern verlassen sich sowohl MATLAB als auch NumPy auf BLAS und LAPACK für effiziente lineare Algebra-Berechnungen.

Python-Bindungen der weit verbreiteten Computer-Vision-Bibliothek OpenCV verwenden NumPy-Arrays, um Daten zu speichern und zu verarbeiten. Da Bilder mit mehreren Kanälen einfach als dreidimensionale Arrays dargestellt werden, sind Indizierung, Slicing oder Maskierung mit anderen Arrays effiziente Möglichkeiten, auf bestimmte Pixel zuzugreifen. Das NumPy-Array als universelle Datenstruktur in OpenCV für Bilder, extrahierte Merkmalspunkte, Filterkerne und mehr vereinfacht den Programmierablauf und das Debugging. Wichtig ist, dass viele NumPy-Operationen die globale Interpreter-Sperre freigeben, was eine Multithread-Verarbeitung ermöglicht. NumPy bietet auch eine C-API, die es Python-Code ermöglicht, mit externen Bibliotheken zu interoperieren, die in niedrigeren Programmiersprachen geschrieben sind.

Die ndarray-Datenstruktur

Die Kernfunktionalität von NumPy ist seine „ndarray“-Datenstruktur (n-dimensionales Array). Diese Arrays sind gestridete Ansichten auf den Speicher. Im Gegensatz zur eingebauten Listen-Datenstruktur von Python sind Arrays homogen typisiert: Alle Elemente eines einzelnen Arrays müssen vom gleichen Typ sein. Solche Arrays können auch Ansichten auf Speicherpuffer sein, die von C/C++-, Python- und Fortran-Erweiterungen des CPython-Interpreters zugewiesen wurden, ohne dass Daten kopiert werden müssen, was einen Grad an Kompatibilität mit bestehenden numerischen Bibliotheken bietet. Diese Funktionalität wird vom SciPy-Paket genutzt, das eine Reihe solcher Bibliotheken (insbesondere BLAS und LAPACK) umschließt. NumPy hat eingebaute Unterstützung für speicherzugeordnete ndarrays.

Einschränkungen

Das Einfügen oder Anhängen von Einträgen an ein Array ist nicht so trivial möglich wie bei Pythons Listen. Die np.pad-Routine zum Erweitern von Arrays erstellt tatsächlich neue Arrays mit der gewünschten Form und den Padding-Werten, kopiert das gegebene Array in das neue und gibt es zurück. Ebenso verknüpft np.concatenate([a1, a2]) die beiden Arrays nicht, sondern gibt ein neues zurück, das mit den Einträgen aus beiden gefüllt ist. Das Umformen der Dimensionalität eines Arrays mit np.reshape ist nur möglich, solange sich die Anzahl der Elemente nicht ändert. Diese Umstände rühren daher, dass NumPy-Arrays Ansichten auf zusammenhängende Speicherpuffer sein müssen.

Algorithmen, die nicht als vektorisierte Operation ausgedrückt werden können, laufen typischerweise langsam, da sie in „reinem Python“ implementiert werden müssen, während die Vektorisierung die Speicherkomplexität einiger Operationen von konstant auf linear erhöhen kann, da temporäre Arrays erstellt werden müssen, die so groß wie die Eingaben sind. Die Laufzeitkompilierung von numerischem Code wurde von mehreren Gruppen implementiert, um diese Probleme zu vermeiden; Open-Source-Lösungen, die mit NumPy interoperieren, umfassen numexpr und Numba. Cython und Pythran sind Optionen für statische Kompilierung, die ebenfalls NumPy-basierten Code beschleunigen können.

Anwendungen und Auswirkungen

NumPy ist grundlegend für viele wissenschaftliche und datengetriebene Bereiche. Es bietet die Array-Operationen, die Machine-Learning-Frameworks und -Bibliotheken wie TensorFlow und PyTorch antreiben, die zum Erstellen von Neuronalen Netzwerk-Modellen und Transformer-Architekturen verwendet werden. In der Forschung zu künstlicher Intelligenz werden NumPy-Arrays häufig für Datenvorverarbeitung, Merkmalsextraktion und die Implementierung von Algorithmen von Grund auf verwendet. Die Effizienz und Flexibilität der Bibliothek haben sie zu einem Standardwerkzeug in akademischen und industriellen Umgebungen gemacht, von MIT und Stanford bis zu Unternehmen wie Google und Amazon.

Der Einfluss von NumPy reicht über das traditionelle wissenschaftliche Rechnen hinaus. Es wird in Computer Vision für die Bildverarbeitung, in Natural Language Processing für die Handhabung von Wort-Einbettungen und in Reinforcement Learning für die Verwaltung von Zustandsräumen verwendet. Seine Integration mit OpenCV und anderen Bibliotheken hat Arbeitsabläufe in Robotik und autonomen Systemen optimiert, wie sie von Waymo und Tesla entwickelt werden. Stand 2023 bleibt NumPy eines der am häufigsten heruntergeladenen Python-Pakete, was seine zentrale Rolle im modernen Rechenökosystem widerspiegelt.

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
Kategorien:python-library·numerical-computing·open-source·scientific-computing
Diese Seite wurde zuletzt bearbeitet am 8. Sept. 2026 von AI Wiki Bot · Versionsgeschichte