Die Version 2.0.0 der Python-Bibliothek für wissenschaftliches Rechnen NumPy ist verfügbar. Sie ist auf die Arbeit mit mehrdimensionalen Arrays und Matrizen ausgerichtet und bietet eine große Sammlung von Funktionen zur Implementierung verschiedener algorithmischer Ansätze im Zusammenhang mit der Verwendung von Matrizen. NumPy ist eine der meistgenutzten Bibliotheken für wissenschaftliche Berechnungen. Der Projektcode ist in Python verfasst, nutzt Optimierungen in C und wird unter der BSD-Lizenz verteilt.
NumPy 2.0.0 wird als das erste bedeutende Release seit 2006 gekennzeichnet.
In der neuen Version wurden neben neuen Funktionen und Leistungsoptimierungen Änderungen an ABI, Python-API und C-API eingeführt, die die Abwärtskompatibilität brechen. Beispielsweise benötigt die mit NumPy 1.x kompilierte SciPy-Bibliothek eine Neucompilierung, um mit NumPy 2.0 zu arbeiten. In einigen Fällen kann es erforderlich sein, Änderungen im Code vorzunehmen, um NumPy 2.0 in Anwendungen zu verwenden.
Die gravierendste Änderung betrifft die Genauigkeit von Skalaren, z.B. gibt „np.float32(3) + 3“ jetzt einen Wert vom Typ float32 zurück und 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)“ gibt einen Wert vom Typ float64 zurück. Die standardmäßigen Ganzzahltypen, die auf der Windows-Plattform verwendet werden, wurden geändert — auf 64-Bit-Systemen wird jetzt der 64-Bit-Ganzzahltyp verwendet, und auf 32-Bit-Systemen der 32-Bit-Typ (früher wurde ein Äquivalent des C-Typs long verwendet, jetzt ist es np.intp).
Einige Definitionen im C-API wurden ersetzt oder entfernt, z.B. wurde die Struktur PyArray_Descr geändert. Die maximale Anzahl von Dimensionen und Argumenten, die über die Makros NPY_MAXDIMS und NPY_MAXARGS angegeben werden, wurde auf 64 erhöht. Alle komplexen Typen haben jetzt standardmäßige Typen aus der C99-Spezifikation (cfloat_t, cdouble_t, clongdouble_t) übernommen. Eine neue C-API wurde hinzugefügt, um eigene dtypes zu erstellen. Es wurden neue vereinfachte Initialisierungsfunktionen PyArray_ImportNumPyAPI und PyUFunc_ImportUFuncAPI vorgeschlagen.
Das Python-API bietet eine klarere Trennung zwischen öffentlichem und privatem API sowie eine neue Modulstruktur. Etwa 100 Funktionen, Module und Konstanten wurden aus dem Hauptnamenraum „np“ herausgenommen, als veraltet erklärt oder entfernt.
Der Namensraum np.lib wurde bereinigt. Die Anzahl der Objekte im Hauptnamensraum wurde um 10 % reduziert, während im Namensraum numpy.lib eine Reduktion um 80 % erfolgte. Es wurde in den privaten Namensraum numpy.core verschoben. Einige Methoden aus den Klassen np.ndarray und np.generic wurden entfernt. Ein neuer Namensraum numpy.stringsf mit String-Operationen wurde erstellt.
Zu den neuen Funktionen gehört die Unterstützung der Datentypen float32 und longdouble in allen Funktionen von numpy.fft, die Unterstützung der Standard-API für Arrays im Hauptnamensraum, ein neuer Namensraum und Typen für Strings mit variabler Länge. Die Leistung wurde durch den Einsatz der Bibliotheken Intel x86-simd-sort und Google Highway für die String-Funktionen sort, argsort, partition und argpartition optimiert, sowie die Operationen mit festen Strings im Modul numpy.char beschleunigt. Eine neue API wurde hinzugefügt.
opt_func_info zur Verfolgung und Introspektion.
Quelle: opennet.ru
