Die Python-Bibliothek für wissenschaftliches Rechnen NumPy 2.0.0 ist jetzt verfügbar. Sie ist auf die Arbeit mit mehrdimensionalen Arrays und Matrizen ausgerichtet und bietet eine umfangreiche Sammlung von Funktionen zur Implementierung verschiedener Algorithmen im Zusammenhang mit Matrizen. NumPy gehört zu den am häufigsten verwendeten Bibliotheken für wissenschaftliche Berechnungen. Der Projektcode ist in Python geschrieben und nutzt Optimierungen in C, und wird unter der BSD-Lizenz verbreitet.
NumPy 2.0.0 wird als das erste bedeutende Release seit 2006 angesehen.
In der neuen Version wurden neben neuen Funktionen und Leistungsoptimierungen Änderungen an ABI, Python-API und C-API vorgenommen, die die Abwärtskompatibilität beeinträchtigen. Beispielsweise erfordert die mit NumPy 1.x kompilierte SciPy-Bibliothek zur Nutzung von NumPy 2.0 eine Neukompilierung. In einigen Fällen kann es erforderlich sein, Anpassungen am Code vorzunehmen, um NumPy 2.0 in Anwendungen nutzen zu können.
Das größte Problem betrifft die Konsistenz bei der Genauigkeit der Skalarwerte. Beispielsweise wird nun „np.float32(3) + 3“ einen Wert vom Typ float32 zurückgeben, nicht float64. In Ausdrücken mit mehreren Typen wird der Typ mit der höchsten Genauigkeit verwendet, d.h. „np.array([3], dtype=np.float32) + np.float64(3)“ liefert einen Wert vom Typ float64 zurück. Die standardmäßig verwendeten Ganzzahltypen auf der Windows-Plattform wurden geändert – auf 64-Bit-Systemen wird jetzt der 64-Bit-Ganzzahltyp verwendet, während auf 32-Bit-Systemen der 32-Bit-Typ zum Einsatz kommt (zuvor wurde ein Äquivalent des C-Typs long verwendet, jetzt jedoch np.intp).
Einige Definitionen im C-API wurden ersetzt oder entfernt, z.B. wurde die Struktur PyArray_Descr geändert. Die maximale Anzahl an Dimensionen und Argumenten, die über die Makros NPY_MAXDIMS und NPY_MAXARGS festgelegt werden, wurde auf 64 erhöht. Alle komplexen Typen wurden auf die Standardtypen gemäß der C99-Spezifikation (cfloat_t, cdouble_t, clongdouble_t) umgestellt. Eine neue C-API zur Erstellung eigener dtype wurde hinzugefügt. Neue vereinfachte Initialisierungsfunktionen PyArray_ImportNumPyAPI und PyUFunc_ImportUFuncAPI wurden vorgeschlagen.
Die Python-API bietet eine klarere Trennung zwischen öffentlichen und privaten APIs und schlägt eine neue Modulstruktur vor. Etwa 100 Funktionen, Module und Konstanten wurden aus dem Hauptnamensraum «np» entfernt, als veraltet markiert oder gelöscht.
Der Namensraum np.lib wurde bereinigt. Die Anzahl der Objekte im Hauptnamensraum wurde um 10 % reduziert, und im Namensraum numpy.lib um 80 %. Bestimmte Namensräume wurden in den privaten Namensraum numpy.core übertragen. Einige Methoden der Klassen np.ndarray und np.generic wurden entfernt. Ein neuer Namensraum numpy.stringsf mit String-Operationen wurde erstellt.
Zu den neuen Funktionen gehören die Unterstützung der Typen float32 und longdouble in allen numpy.fft-Funktionen, die Unterstützung des Standard-Array-APIs im Hauptnamensraum sowie ein neuer Namensraum und Typen für Strings variabler Länge. Die Leistungsoptimierung wurde mit den Intel x86-simd-sort und Google Highway Bibliotheken für die String-Funktionen sort, argsort, partition und argpartition durchgeführt, und die Operationen mit festen Strings im numpy.char-Modul wurden beschleunigt. Eine neue API wurde hinzugefügt.
opt_func_info für das Tracing und die Inspektion.
Quelle: opennet.ru
