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.

In Pocket speichern vorlesen Druckansicht 25 Kommentare lesen

(Bild: vs148/Shutterstock.com)

Lesezeit: 3 Min.
Inhaltsverzeichnis

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.

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.

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.

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)