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.
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.
Genau mein Typ
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]
Wo ist der Gral?
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
.
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.
Verteilung und Schiebefenster
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.
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)