Numerical Python – Einführung in wissenschaftliches Rechnen mit NumPy

NumPy steht für Numerical Python und ist eines der bekanntesten Pakete für alle Python-Programmierer mit wissenschaftlichen Hintergrund. Von persönlichen Kontakten erfuhr ich, dass NumPy heute in der Astrophysik fast genauso verwendet wird wie auch von sogenannten Quants im Investment-Banking. Das NumPy-Paket ist sicherlich ein Grundstein des Erfolges für Python in der Wissenschaft und für den häufigen Einsatz für die Implementierung von Algorihtmen des maschinellen Lernens in Python.

Die zentrale Datenstruktur in NumPy ist das mehrdimensionale Array. Dieses n-dimensionale Array (ndarray) ist eine sehr mächtige Datenstruktur und verwende ich beispielsweise in meinem Artikel über den k-Nächste-Nachbarn-Algorithmus. Die Besonderheit des NumPy-Arrays ist, dass es ein mehrdimensionaler Container für homogene Daten ist. Ein Datentyp gilt also für das gesamte Array, nicht nur für bestimmte Zeilen oder Spalten!

Wer ein NumPy-Array erstellen möchte, kann dies beispielsweise einfach über eine Liste (Standard-Python) tun, die in ein NumPy-Array umgewandelt werden kann:

Eine zweite, einfachere Liste mit einheitlicher Spaltenzahl pro Zeile verdeutlicht das Prinzip noch mehr:

Während die Listen, die Python von Haus aus mitbringt, schwer zu indizieren sind (bei Mehrdimensionalität) und auch nicht wie eine Matrix dargestellt werden (und auch keine Matrix-Operationen anwendbar sind), haben wir all diese Features mit dem ndarray von NumPy.

Schnelle Erzeugung von Arrays

Schnell mal ein Array erzeugen? Kein Problem mit np.zeros() oder np.ones().

Indizierung

ndarrays lassen sich wie gewohnt über einen Index (in eckigen Klammern) gezielt ansprechen:

Bei mehrdimensionalen Arrays wird es schnell unübersichtlich, allerdings ist dies in NumPy recht intelligent gelöst. Elemente können natürlich rekursiv angesprochen werden, wie wir es auch bei den Listen im Standard-Python gewohnt sind:

Darüber hinaus können NumPy-Arrays auch über ein Slicing (Ausschnitte über eine Range) indiziert angesprochen werden: array[Zeilen, Spalten].

Fancy Indexing

Fancy Indexing (zu Deutsch etwa “ausgefallenes Indexing”) bietet zwei Funktionen zum Auswählen von Zeilen oder Zellen im mehrdimensionalen Array, die besonders praktisch sind, wenn man es mit sehr großen multidimensionalen Arrays zutun hat.

Wenn wir mehrere Vektoren als Index liefern, werden diese als Koordinatensystem aufgefasst und so können wir auch über x und y zugreifen:

Hier als Beispiel (da gerade noch übersichtlich darstellbar) nur mit zwei Dimensionen (x, y). Es funktioniert aber auch mit drei oder noch mehr Dimensionen.

Achtung: NumPy-Arrays sind standardmäßig Referenzen!

Jeder Programmierer kennt den Unterschied zwischen der Referenz einer Variable und einer Kopie. Während im Standard-Python Listen standardmäßig kopiert werden, werden NumPy-Arrays standardmäßig referenziert. Wenn man dies nicht im Bewusstsein hat, provoziert schnell mal ungeahnte Fehler.

Der Grund für diesen Umgang ist, dass NumPy für große Datenmengen konzipiert wurde, für die Kopien als Default besser vermieden werden. Wer also ein Array oder einen Ausschnitt aus diesem bewusst kopieren möchte, darf.copy() nicht vergessen.

Datentypen festlegen und Casten

Numpy erkennt selbstständig, welcher Datentyp für den Arrayinhalt der vermutlich richtige ist. Wer sichergehen will, kann den Datentypen jedoch auch direkt bei der Erstellung des Arrays festlegen.

Wer nicht gleich das ganze Array kopieren möchte, um den Datentypen zu wechseln, kann selbstverständlich auch Casting betreiben.

Matrizenberechnungen mit NumPy

Vermutlich ist die Vektorberechnung der häufigste Grund, die NumPy-Bibliothek zu importieren. Früher hatte ich solche Operationen mit einer oder mehreren For-Schleifen durchführen müssen, mit NumPy können Arrays einfach untereinander “verrechnet” werden.

Aber Achtung! Vor solchen Berechnungen, sollte das ndarray vorher den passenden Datentypen zugewiesen bekommen, sonst drohen ungeahnte Fehler:

Mit dem Zuweisen des Float64-Datentypen wird die Kalkulation wieder korrekt:

 

Benjamin Aunkofer

Benjamin Aunkofer ist Lead Data Scientist bei DATANOMIQ und Hochschul-Dozent für Data Science und Data Strategy. Darüber hinaus arbeitet er als Interim Head of Business Intelligence und gibt Seminare/Workshops zu den Themen BI, Data Science und Machine Learning für Unternehmen.

2 replies

Trackbacks & Pingbacks

  1. […] durchführen müssen. Wir starten zunächst mit dem Importieren von drei Bibliotheken NumPy und Pandas, deren Bedeutung ich nicht weiter erläutern werde, somit […]

  2. […] durchführen müssen. Wir starten zunächst mit dem Importieren von drei Bibliotheken NumPy und Pandas, deren Bedeutung ich nicht weiter erläutern werde, somit […]

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

8798 Views