NumPy 1.22 nähert sich dem Python-Array-API-Standard an
Das NumPy-Entwicklerteam macht einen ersten Schritt in Richtung Interoperabilität mit anderen Array/Tensor-Librarys.
Das NumPy-Team hat Version 1.22 der Python-Library veröffentlicht. Die auf Matrixoperationen und numerische Berechnungen ausgelegte Open-Source-Bibliothek führt im aktuellen Release eine Reihe neuer Funktionen und Verbesserungen ein – darunter eine vorläufige Version der Array-API und ein DLPack-Backend. Laut Release Notes haben sich insgesamt 153 Personen an der Entwicklung der jüngsten Version mit insgesamt 609 einbezogenen Pull Requests beteiligt. NumPy 1.22 setzt mindestens Python 3.8 voraus und verabschiedet sich damit von allen Versionen der Programmiersprache inklusive 3.7 und davor.
Vollständige Annotationen im Namespace
Annotationen für den Haupt-Namensraum von NumPy gelten als abgeschlossen. Im Zuge der Diskussion über ein Typsystem für NumPy hatte das Entwicklerteam in Version 1.20 erste Typ-Annotationen für verschiedene Bereiche der Library eingeführt und das Modul numpy.typing
ergänzt. Zu den weiteren Unterpaketen, die seitdem mit Annotationen versehen wurden, gehören unter anderem numpy.testing
, numpy.linalg
und numpy.random
.
Standardisierter Austausch
Die auch im NEP 47 für NumPy vorgeschlagene Implementierung eines Python-Array-API-Standards soll die Interoperabilität von Array/Tensor-Librarys verbessern, um Code zwischen NumPy und TensorFlow, PyTorch, Dask, JAX, CuPy oder MXNet auszutauschen. NumPy 1.22 stellt nun eine erste vorläufige Version der Array-API bereit. Da der Standard sich noch im Entwurfsstatus befindet, gilt numpy.array_api
allerdings noch als experimentell. Damit schafft das NumPy-Team aber erste Voraussetzungen zum Erstellen einer Standardsammlung von Funktionen, die sich applikationsübergreifend nutzen lassen. Ergänzend dazu stellt NumPy über ein neues Backend für DLPack ein gemeinsames Austauschformat für Array-(Tensor-)Daten zur Verfügung.
Einsatz auf Windows/arm64-Zielplattformen
Erstmals lässt sich die Python-Bibliothek für wissenschaftliche Berechnungen auch mit Windows/arm64-Zielplattformen nutzen, während OpenBLAS (Basic Linear Algebra Subprograms) für diese Ziele offiziell noch keinen Support bietet. Darüber hinaus wurden knapp 20 Funktionen aus dem umath-Modul mit Intels Short Vector Math Library (SVML) und dem Instruktionssatz AVX-512 für Single- und Double-Precision-Implementierungen vektorisiert. Die verschiedenen Winkel- und Logarithmusfunktionen sollen dadurch um den Faktor 32 (Single Precision) beziehungsweise 14 (Double Precision) beschleunigt werden. Profitieren können davon vorläufig allerdings ausschließlich NumPy-Anwender unter Linux auf Systemen mit Prozessoren, die AVX-512 nutzen.
In Anlehnung an den PEP 585 für die Python-Standard-Library wurden nun auch für NumPy die Klassen ndarray
, dtype
und number
um die Klassenmethode __class_getitem__
ergänzt. Ausdrücke, die bisher lediglich in .pyi-Stub-Dateien oder mithilfe von from __future__ import annotations
erlaubt waren, sind künftig auch zur Laufzeit zulässig.
>>> import numpy as np
>>> from typing import Any
>>> np.ndarray[Any, np.dtype[np.float64]]
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]
Ein kompletter Überblick sämtlicher Neuerungen und Verbesserungen in NumPy 1.22 lässt sich den Release Notes auf GitHub entnehmen.
(map)