Python-Library: NumPy 1.20 führt Typisierung ein

Neben Type Annotations und einem separaten Modul für Typvorgaben bringt die Bibliothek Eingrenzungen für statistische Berechnungen und Sliding-Windows mit.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen

(Bild: vs148/Shutterstock.com)

Lesezeit: 3 Min.
Inhaltsverzeichnis

Das NumPy-Team hat Verion 1.20 der Python-Library veröffentlicht. Die auf Matrixoperationen und numerische Berechnungen ausgelegte Open-Source-Bibliothek führt im aktuellen Release Typ-Annotationen und ein eigenes Modul für Typen ein. Daneben lassen sich einige Funktionen über where eingrenzen, und der Random-Generator hat eine neue Funktion an Bord.

Insgesamt haben sich laut Release Notes 184 Personen an der Entwicklung der jüngsten Version mit insgesamt 684 einbezogenen Pull Requests beteiligt. NumPy 1.20 setzt mindestens Python 3.7 voraus und schneidet damit den 3.6-Zopf ab. Im Zusammenspiel mit Cython ist es auf die Version 3.0 vorbereitet, die in Kürze mit einem großen Sprung als Nachfolger von Cython 0.29 erscheinen soll.

Die Diskussion über ein Typsystem für NumPy läuft bereits seit längerer Zeit und hat 2020 erneut Fahrt aufgenommen. Mit dem aktuellen Release bietet NumPy Typ-Annotationen für große Bereiche der Library und führt eigens das Modul numpy.typing ein.

Zum Start kennt NumPy die beiden Typen ArrayLike für eine Typvorgabe zu ndarray und DtypeLike für Objekte, die in eine dtype umgewandelt werden. Erstere umfassen unter anderem Skalare, (verschachtelte) Sequenzen und Objekte, die __array__ implementieren. Zu den DtypeLike gehören type-Objekte und Objekte, mit dem .dtype-Attribut.

Das Modul numpy.typing lässt sich wie in folgendem Codeausschnitt in der NumPy-Dokumentation zur Laufzeit implementieren:

from numpy.typing import ArrayLike
x: ArrayLike = [1, 2, 3, 4]

Das Keyword where kommt im aktuellen Release gleich doppelt zum Eingrenzen von Angaben ins Spiel. Zum einen lässt es sich zusammen mit numpy.all und numpy.any verwenden, um nur spezifische Elemente oder Achsen zu berücksichtigen. Es lässt sich sowohl mit den jeweiligen Funktionen zum Überprüfen, ob alle beziehungsweise irgendein Element True ergibt, verwenden als auch im Zusammenspiel mit den Methoden von numpy.ndarray.

Sonderheft zu Machine Learning

Das iX-Developer-Sonderheft "Machine Learning" behandelt auf 148 Seiten unter anderem ML-Frameworks, Textanalyse, Reinforcement Learning und die Produktivstellung von Modellen. Im Fokus steht die praktische Anwendung, und zu den meisten Artikeln existieren Jupyter-Notebooks als Basis für eigene ML-Projekte.

Ein Artikel beschäftigt sich ausführlich mit den grundlegenden Python-Libraries für Data Science und Machine Learning, darunter NumPy und Pandas.

Außerdem dient where neuerdings zum Eingrenzen des Umfangs der Elemente für die Funktionen mean, std und var zum Berechnen des Mittelwerts, der Standardabweichung beziehungsweise der Varianz.

Außerdem bringt NumPy 1.20 zwei neue Funktionen mit: Der random.Generator kennt für die zufällige Permutation neben shuffle und permutation neuerdings permuted.

Ebenfalls neu ist die als Sliding-Window-Ansicht auf Arrays, um beispielsweise einen gleitenden Mittelwert zu berechnen. numpy.lib.stride_tricks.sliding_window_view erwartet als Parameter neben dem Array die Größe des Fensters über die Achsen als int-Wert beziehungsweise -Tupel sowie optional die Achsen auf denen sich das Sliding Window bewegt.

Unter der Haube hat sich das NumPy-Team der verbesserten Compileroptimierung für Parallelrechnen über Single Instruction, Multiple Data (SIMD) gewidmet. Dazu bringt das Release unter anderem zusätzliche Build-Parameter zum Konfigurieren der Optimierungen mit und erstellt automatisch Header-Dateien für die CPU-Instruktionen. Einheitliche Funktionen sollen den Einsatz der Library über unterschiedliche Hardwareplattformen hinweg optimieren.

Eine Bibliothek für Datenstrukturen

(Bild: Von Isabela Presedo-Floyd, CC BY-SA 4.0)

Die Open-Source-Bibliothek NumPy gehört zu den bekanntesten und am weitesten verbreiteten Python-Libraries für Matrixoperationen und numerische Berechnungen. Sie bietet eine leicht zugängliche Schreibweise für Matrixoperationen und verwendet zudem die eigene Datenstruktur ndarray. Alle darin abgelegten Elemente haben den vorgegebenen Typ dtype und eine definierte Größe shape zur Angabe der maximalen Ausprägung der Dimensionen.

Im Gegensatz beispielsweise zu List-Objekten in Python haben alle Elemente in den NumPy.Arrays denselben Datentyp. Diese Vorgaben bringen einen Performancevorteil gegenüber dem Verwenden von Arrray-Konstrukten in Python, da sie das Speichermanagement optimieren und das individuelle Type Checking entfällt.

NumPy blickt auf eine lange Geschichte zurück. Zwar existiert die Library unter diesem Namen "erst" seit 2005. Sie baut aber maßgeblich auf die Bibliothek Numeric auf, die bereits vor 25 Jahren erschienen ist, als das seinerzeit vier Jahre alte Python selbst noch in den Kinderschuhen steckte. Der Anaconda-Mitbegründer Travis Oliphant hat für die erste Veröffentlichung von NumPy einige Funktionen von Numarray in Numeric einbezogen.

Weitere Neuerungen sowie Informationen zu einigen als überholt (deprecated) bezeichneten Funktionen lassen sich den Release Notes entnehmen.

(rme)