[[Vorlage(Getestet, focal, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis(1)]] [[Bild(numpy_logo.png, 72, align=left)]] [https://numpy.org/ NumPy] {en} ist ein [:Python:]-Modul, welches in erster Linie für (wissenschaftliche) Berechnungen konzipiert ist. Eine Kernfunktionalität von NumPy ist die Datenstruktur "ndarray", welche (sehr) große Mengen an Daten speichereffizient verwalten kann. Außerdem stellt das Modul diverse Methoden und Klassen für Lineare Algebra, Zufallszahlen und die [wikipedia:Schnelle_Fourier-Transformation:Schnelle Fourier-Transformation] bereit. Die Berechnungen selbst werden teilweise durch die in C und Fortran geschriebenen, hochgradig optimierten Bibliotheken [wikipedia:LAPACK:] und [wikipedia_en:Basic_Linear_Algebra_Subprograms:BLAS] vorgenommen, wodurch diese sehr schnell sind. Andere Python-Programme, die größere Mengen an (wissenschaftlichen oder finanztechnischen) Daten nutzen, wie z.B. [http://scipy.org/scipylib/index.html SciPy] {en} oder [http://pandas.pydata.org/ Pandas] {en}, setzen auf NumPy auf. = Installation = Für Python 3 installiert man NumPy über das Paket[1]: {{{#!vorlage Paketinstallation python3-numpy }}} == Manuell == NumPy ist zwar in den offiziellen Paketquellen enthalten, allerdings nicht unbedingt in der aktuellsten Version. Wer diese benötigt, der sollte NumPy manuell via [:pip:] installieren. NumPy unterstützt ab der Version 1.17 ausschließlich Python in der Version >= 3.5. NumPy via pip installiert werden[2]: {{{#!vorlage Befehl pip3 install numpy }}} Wer NumPy systemweit installieren möchte, der muss diesen Befehl mit Root-Rechten[3]. =Verwendung= NumPy kann, wie bei allen Python-Modulen üblich, über `import` initialisiert werden, wobei es gängige Praxis ist, NumPy an den Namen `np` zu binden: {{{#!code pycon >>> import numpy as np }}} Wie in der Einleitung erwähnt, ist eine Kernfunktion von NumPy die Datenstruktur `ndarray`, welche n-dimensionale Arrays bereit stellt: {{{#!code pycon >>> data = np.array([1, 2, 3]) >>> data array([1, 2, 3]) >>> data_2D = np.array([[1, 2, 3], ... [4, 5, 6]]) >>> data_2D array([[1, 2, 3], [4, 5, 6]]) >>> data_text = np.array(['foo', 'bar']) >>> data_many_types = np.array([1, 2.0, 'spamegg']) >>> data_many_types array(['1', '2.0', 'spamegg'], dtype='>> data_text array(['foo', 'bar'], dtype='>> data.dtype dtype('int64') >>> data2 = np.array([1, 2, 3], dtype=float) >>> data2 array([ 1., 2., 3.]) >>> data_as_float = data.astype(float) >>> data_as_float array([ 1., 2., 3.]) }}} Arrays in NumPy unterstützen wie in Python gewohnt den Zugriff auf Elemente über den Index als auch Slicing: {{{#!code pycon >>> data[2] 3 >>> data_2D[0] array([1, 2, 3]) >>> data_2D[0][1] 2 >>> data_2D[1:] array([[4, 5, 6]]) }}} Mehrdimensionale Arrays können auch umstrukturiert werden: {{{#!code pycon >>> data_2D.reshape([3, 2]) array([[1, 2], [3, 4], [5, 6]]) >>> data.reshape([3, 1]) array([[1], [2], [3]]) }}} Mit den Funktionen [https://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html arange] {en} und [https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html linspace] {en} erhält man Daten, die zwischen einem Start- und einem Endpunkt gleichmäßig verteilt sind: {{{#!code pycon >>> line = np.arange(1, 10, 1) >>> line array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> another_line = np.linspace(1, 10, 19) >>> another_line array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5, 10. ]) }}} Mit Arrays kann man normal Rechnen: {{{#!code pycon >>> data+data2 array([ 2., 4., 6.]) >>> data * data_2D array([[ 1, 4, 9], [ 4, 10, 18]]) }}} [https://docs.scipy.org/doc/numpy/reference/routines.linalg.html numpy.linalg] {en} stellt dabei noch eine Vielzahl von weiteren Rechenoperationen, auch für die Vektorrechnung, bereit. In den letzten beiden Beispielen wird mit Hilfe von NumPy ein lineares Gleichungssystem gelöst: {{{ 3 * x0 + x1 = 9 x0 + 2 * x1 = 8 }}} {{{#!code pycon >>> a = np.array([[3, 1], [1, 2]]) >>> b = np.array([9, 8]) >>> np.linalg.solve(a, b) array([ 2., 3.]) }}} Die Lösungen sind also 2 und 3. {{{ 4*x + 2*y + 2*z = 8 3*x - 4*y + 3*z = -2 1*x + 3*y + 2*z = 4 }}} {{{#!code pycon >>> a = np.array([[4, 2, 2], [3, -4, 3], [1, 3, 2]]) >>> b = np.array([8, -2, 4]) >>> np.linalg.solve(a, b) array([ 1.75, 1.25, -0.75] }}} Hier sind die Lösungen 1,75, 1,25 und -0,75. = Problem und Lösung = == fehlende Bibliotheken bei der manuellen Installation == Erhält man bei der manuellen Installation via pip eine Fehlermeldung, dass Bibliotheken, Headerdateien oder der Compiler nicht gefunden werden, dann müssen diese nachinstalliert werden, um die in C und Fortran geschriebenen Routinen kompilieren zu können. Dazu müssen die beiden folgenden Pakete installiert sein: {{{#!vorlage Paketinstallation build-essential python3-dev }}} =Links= * [https://numpy.org/ Projektseite] {en} * [https://numpy.org/doc/stable/reference/ Dokumentation] {en} zu NumPy, welche sehr umfangreich und detailliert ist * [https://numpy.org/doc/stable/user/ User Guide] {en} für NumPy * [github:noisefloor/depytu/blob/main/docs/numpy.md:deutschsprachige Übersetzung] des NumPy Einsteiger Tutorials * [wikipedia_en:NumPy:] - Wikipedia * [http://dask.pydata.org/en/latest/ Dask] {en} - Python-Modul, welche noch größere Datenmengen als NumPy parallel verarbeiten kann #tag: Python, Bildung, Wissenschaft