Dieses tutorial wurde ursprünglich geschrieben von Justin Johnson.
Für alle Aufgaben in diesem Kurs verwenden wir die Programmiersprache Python.Python ist eine großartige Allzweck-Programmiersprache für sich, aber mit Hilfe einiger populärer Bibliotheken (numpy, Scipy, matplotlib) wird es zu einer Leistungsfähigenumgebung für wissenschaftliches Rechnen.,
Wir erwarten, dass viele von Ihnen einige Erfahrung mit Python und numpy haben werden;für den Rest von Ihnen wird dieser Abschnitt als ein schneller Crashkurs auf beiden dienendie Programmiersprache Python und ihre Verwendung für wissenschaftlichecomputing. Wir werden auch Notebooks vorstellen, die eine sehr bequeme Art sinddes Bastelns mit Python-Code. Einige von Ihnen verfügen möglicherweise über Vorkenntnisse in einer anderen Sprache, in diesem Fall empfehlen wir auch die Referenzierung:NumPy für Matlab-Benutzer, Python für R-Benutzer und / orPython für SAS-Benutzer.,
- Listen
- Wörterbücher
- Sets
- Tupel
- Arrays
- Array Indizierung
- Datentypen
- Array math
- Broadcasting
- Numpy Documentation
- Image operations
- MATLAB files
- Distance between points
- Plotten
- Subplots
- Images
Jupyter and Colab Notebooks
Bevor wir in Python eintauchen, möchten wir kurz über Notebooks sprechen.,Mit einem Jupyter-Notizbuch können Sie schreibenpython-Code lokal in Ihrem Webbrowser ausführen. Jupyter notebooksmake es sehr einfach, mit code zu basteln und führen Sie es in bitsand stücke; aus diesem grund sind sie weit verbreitet in scientificcomputing.Colab auf der anderen Seite ist Googles Geschmack Vonjupyter Notebooks, die besonders für maschinelles Lernen und Datenanalyse geeignet ist und die vollständig in der Cloud läuft.,Colab ist im Grunde Jupyter Notebook auf Steroiden: es ist kostenlos, erfordert keine Einrichtung, kommt mit vielen Paketen vorinstalliert, ist einfach mit der Welt zu teilen, und profitiert von freiem Zugang zu Hardware-Beschleuniger wie GPUs und TPUs (mit einigen Einschränkungen).
Tutorial in Colab ausführen (empfohlen). Wenn Sie dieses Tutorial vollständig in Colab ausführen möchten, klicken Sie ganz oben auf dieser Seite auf das Abzeichen Open in Colab
.
Führen Sie Tutorial in Jupyter Notebook., Wenn Sie das Notebook lokal mit Jupyter ausführen möchten, stellen Sie sicher, dass Ihre virtuelle Umgebung korrekt installiert ist (gemäß den Setup-Anweisungen), aktivieren Sie es und führen Sie dann pip install notebook
aus, um Jupyter notebook zu installieren. Öffnen Sie anschließend das Notebook und laden Sie es in ein Verzeichnis Ihrer Wahl herunter, indem Sie mit der rechten Maustaste auf die Seite klicken und Save Page As
auswählen. Dann cd
zu diesem Verzeichnis und führen Sie jupyter notebook
.
Dies sollte automatisch einen Notebook-Server unter starten.,Wenn alles richtig funktioniert hat, sollten Sie einen Bildschirm wie diesen sehen, auf dem alle Notebooks im aktuellen Verzeichnis angezeigt werden. Klicken Sie auf
jupyter-notebook-tutorial.ipynb
und folgen Sie den Anweisungen im Notebook. Andernfalls können Sie weiterlesen thetutorial mit Code-Snippets unten.
Python
Python ist eine hochrangige, dynamisch typisierte Multiparadigmenprogrammiersprache.Python-Code wird oft gesagt, fast wie Pseudocode zu sein, da es Ihnen erlaubt, sehr mächtige Ideen in sehr wenigen Codezeilen auszudrücken, während sie sehr lesbar sind., Als Beispiel ist hier eine Implementierung des klassischen Quicksortalgorithmus in Python:
Python-Versionen
Ab dem 1.Januar 2020 hat Python die Unterstützung für python2
offiziell eingestellt.Für diese Klasse wird der gesamte Code Python 3.7 verwenden. Stellen Sie sicher, dass Sie die Setup-Anweisungen durchlaufen und eine virtuelle Umgebung python3
korrekt installiert haben, bevor Sie mit diesem Tutorial fortfahren.Sie können Ihre Python-Version in der Befehlszeile überprüfen, nachdem Sie Ihre Umgebung aktiviert haben, indem Sie python --version
.,
Grundlegende Datentypen
Wie die meisten Sprachen verfügt Python über eine Reihe von Grundtypen, einschließlich Ganzzahlen, Gleitkommazahlen, Booleschen Werten und Zeichenfolgen. Diese Datentypen verhalten sich auf eine Weise, die aus anderen Programmiersprachen nicht bekannt ist.
Zahlen: Ganzzahlen und Gleitkommazahlen funktionieren wie von anderen Sprachen erwartet:
Beachten Sie, dass Python im Gegensatz zu vielen Sprachen keine unären Inkremente (x++
) oder Dekremente (x--
) hat.
Python hat auch integrierte Typen für komplexe Zahlen;Sie können alle Details in der Dokumentation finden.,
Boolesche Werte: Python implementiert alle üblichen Operatoren für Boolesche Logik, verwendet jedoch englische Wörter anstelle von Symbolen (&&
, ||
usw.):
Strings: Python hat große Unterstützung für Strings:
String-Objekte haben eine Reihe von nützlichen Methoden; zum Beispiel:
Sie können eine Liste aller String-Methoden in der Dokumentation finden.
Container
Python enthält mehrere integrierte Containertypen: Listen, Wörterbücher, Sätze und Tupel.,
Listen
Eine Liste ist das Python-äquivalent zu einem array, aber ist resizeableand enthalten kann Elemente verschiedener Typen:
Wie üblich, Sie können finden alle die gory details über listsin der Dokumentation.
Slicing: Zusätzlich zum Zugriff auf Listenelemente nacheinander bietet Python eine Syntax für den Zugriff auf Unterlisten; Dies wird als Slicing bezeichnet:
Wir werden das Schneiden im Kontext von Numpy-Arrays erneut sehen.,
Schleifen: Sie können die Elemente einer Liste wie folgt durchlaufen:
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Wenn Sie Zugriff auf den Index jedes Elements im Hauptteil einer Schleife wünschen,verwenden Sie die integrierte enumerate
Funktion:
Listenverständnis:Beim Programmieren möchten wir häufig einen Datentyp in einen anderen umwandeln.,Betrachten Sie als einfaches Beispiel den folgenden Code, der quadratische Zahlen berechnet:
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
Sie können diesen Code mithilfe eines Listenverständnisses vereinfachen:
nums = squares = print(squares) # Prints
Listenverständnisse können auch Bedingungen enthalten:
nums = even_squares = print(even_squares) # Prints ""
Wörterbücher
Ein Wörterbuch speichert (Schlüssel, Wert) Paare, ähnlich einem Map
in Java oder einem Objekt in Javascript., Sie können es so verwenden:
In der Dokumentation finden Sie alles, was Sie über dictionaries wissen müssen.
Schleifen: Es ist einfach, die Schlüssel in einem Wörterbuch zu durchlaufen:
Wenn Sie Zugriff auf Schlüssel und ihre entsprechenden Werte wünschen, verwenden Sie die items
Methode:
Wörterbuchverständnisse: Diese ähneln Listenverständnissen, ermöglichen es Ihnen jedoch, leicht zu konstruierendiktionäre. Zum Beispiel:
nums = even_num_to_square = {x: x ** 2 for x in nums if x % 2 == 0}print(even_num_to_square) # Prints "{0: 0, 2: 4, 4: 16}"
Sets
eine Menge ist Eine ungeordnete Sammlung von Elementen., Betrachten Sie als einfaches Beispiel Folgendes:
Wie gewohnt finden Sie alles, was Sie über Sets wissen möchten, in der Dokumentation.,
Schleifen:Das Iterieren über eine Menge hat dieselbe Syntax wie das Iterieren über eine Liste;Da Sets jedoch ungeordnet sind, können Sie keine Annahmen über die Reihenfolge treffen, in der Sie die Elemente der Menge besuchen:
animals = {'cat', 'dog', 'fish'}for idx, animal in enumerate(animals): print('#%d: %s' % (idx + 1, animal))# Prints "#1: fish", "#2: dog", "#3: cat"
Set comprehensions:Wie Listen und Wörterbücher können wir Sets einfach mit set comprehensions:
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
Tupel
Ein Tupel ist eine (unveränderliche) geordnete Liste von Werten.,Ein Tupel ähnelt in vielerlei Hinsicht einer Liste; Einer der wichtigsten Unterschiede besteht darin, dass Tupel als Schlüssel in Wörterbüchern und als Elemente von Mengen verwendet werden können, während Listen dies nicht können.Hier ist ein triviales Beispiel:
Die Dokumentation enthält weitere Informationen zu Tupeln.
Funktionen
Python-Funktionen werden mit dem Schlüsselwort def
definiert. Zum Beispiel:
Wir definieren häufig Funktionen, um optionale Schlüsselwortargumente zu verwenden:
Es gibt viel mehr Informationen zu Python-Funktionen in der Dokumentation.,
Classes
Die Syntax zum Definieren von Klassen in Python ist unkompliziert:
Sie können viel mehr über Python classesin der Dokumentation lesen.
Numpy
Numpy ist die Kernbibliothek für wissenschaftliches Rechnen in Python.It bietet ein leistungsstarkes mehrdimensionales Array-Objekt und Werkzeuge für die Arbeit mit diesen Arrays. Wenn Sie bereits mit MATLAB vertraut sind, könnten Sie findendieses Tutorial nützlich, um mit Numpy zu beginnen.
Arrays
Ein Numpy-Array ist ein Raster von Werten desselben Typs und wird durch ein Tupel vonnonnegative Ganzzahlen indiziert., Die Anzahl der Dimensionen ist der Rang des Arrays; Die Form eines Arrays ist ein Tupel von ganzen Zahlen, das die Größe des Arrays entlang jeder Dimension angibt.
Wir können Numpy-Arrays aus verschachtelten Python-Listen initialisieren und mit eckigen Klammern auf Elemente zugreifen:
Numpy bietet auch viele Funktionen zum Erstellen von Arrays:
Sie können über andere Methoden der Array-Erstellung lesenin der Dokumentation.
Array-Indizierung
Numpy bietet verschiedene Möglichkeiten, in Arrays zu indizieren.
Slicing: Ähnlich wie Python-Listen können Numpy-Arrays geschnitten werden.,Da Arrays mehrdimensional sein können, müssen Sie für jede Dimension des Arrays ein Slice angeben:
Sie können auch die Integer-Indizierung mit der Slice-Indizierung mischen.Dies führt jedoch zu einem Array mit niedrigerem Rang als das ursprüngliche Array.Beachten Sie, dass dies ganz anders ist als die Art und Weise, wie MATLAB Arrayslicing behandelt:
Integer Array Indizierung:Wenn Sie mit Slicing in numpy Arrays indizieren, ist die resultierende Array viewwill immer ein Subarray des ursprünglichen Arrays. Im Gegensatz dazu können Sie mit integer arrayindexing beliebige Arrays mithilfe der Daten von anotherarray erstellen., Hier ist ein Beispiel:
Ein nützlicher Trick bei der ganzzahligen Array-Indizierung besteht darin, ein Element aus jeder Zeile einer Matrix auszuwählen oder zu mutieren:
Boolesche Array-Indizierung:Mit der booleschen Array-Indizierung können Sie beliebige Elemente eines Arrays auswählen.Häufig wird diese Art der Indizierung verwendet, um die Elemente eines Arrays auszuwählen, die eine Bedingung erfüllen. Hier ist ein Beispiel:
Der Kürze halber haben wir viele Details zur numpy Array Indizierung ausgelassen;Wenn Sie mehr wissen möchten, sollten Sie die Dokumentation lesen.
Datentypen
Jedes Numpy-Array ist ein Raster von Elementen desselben Typs.,Numpy bietet eine große Anzahl numerischer Datentypen, mit denen Sie Arrays erstellen können.Numpy versucht, einen Datentyp zu erraten, wenn Sie ein Array erstellen, aber Funktionen, die constructarrays enthalten normalerweise auch ein optionales Argument, um den Datentyp explizit anzugeben.Hier ist ein Beispiel:
Sie können alles über Numpy-Datentypenin der Dokumentation lesen.,
Array math
Mathematische Grundfunktionen arbeiten elementweise auf Arrays und stehen sowohl als Operatorüberladungen als auch als Funktionen im numpy-Modul zur Verfügung:
Beachten Sie, dass *
im Gegensatz zu MATLAB eine elementweise Multiplikation und keine Matrixmultiplikation ist. Wir verwenden stattdessen diedot
Funktion, um Innerprodukte von Vektoren zu berechnen, einen Vektor mit einer Matrix zu multiplizieren und Matrizen zu multiplizieren., dot
ist sowohl als Funktion im numpymodul als auch als Instanzmethode von Array-Objekten verfügbar:
Numpy bietet viele nützliche Funktionen zum Ausführen von Berechnungen auf Arrays; Eine der nützlichsten ist sum
:
Die vollständige Liste der mathematischen Funktionen von numpin der Dokumentation.
Abgesehen von der Berechnung mathematischer Funktionen mithilfe von Arrays müssen wir häufig Daten in Arrays umformen oder anderweitig manipulieren., Das einfachste Beispiel für diese Art von Operation ist das Transponieren einer Matrix; Um eine Matrix zu transponieren,verwenden Sie einfach das Attribut T
eines Array-Objekts:
Numpy bietet viele weitere Funktionen zum Bearbeiten von Arrays; Sie können die vollständige Liste sehenin der Dokumentation.
Broadcasting
Broadcasting ist ein leistungsstarker Mechanismus, mit dem numpy bei arithmetischen Operationen mit Arrays unterschiedlicher Form arbeiten kann. Häufig haben wir ein kleineres Array und ein Logger-Array, und wir möchten das kleinere Array mehrmals verwenden, um eine Operation auf dem größeren Array auszuführen.,
Angenommen, wir möchten jeder Zeile einer Matrix einen konstanten Vektor hinzufügen. Wir könnten es so machen:
Das funktioniert; Wenn die Matrix x
jedoch sehr groß ist, kann die Berechnung eines expliziten Loopins Python langsam sein. Beachten Sie,dass das Hinzufügen des Vektors v
zu jeder Zeile der Matrixx
der Bildung einer Matrix vv
entspricht, indem mehrere Kopien von v
vertikal gestapelt und dann elementweise summiert werden x
und vv
., Wir könnten dies implementierenansatz wie folgt:
Numpy id ermöglicht es uns, diese Berechnung durchzuführen, ohne tatsächlich mehrere Kopien von v
., Betrachten Sie diese Version mit broadcasting:
Die Zeile y = x + v
funktioniert, obwohl x
die Form hat (4, 3)
und v
hat die Form(3,)
aufgrund der Übertragung; Diese Zeile funktioniert so,als ob v
hatte tatsächlich die Form (4, 3)
, wobei jede Zeile eine Kopie von v
war und die Summe elementweise ausgeführt wurde.,
Das Senden von zwei Arrays zusammen folgt diesen Regeln:
- Wenn die Arrays nicht denselben Rang haben, stellen Sie die Form des Arrays mit niedrigerem Rang voranmit 1s, bis beide Formen die gleiche Länge haben.
- Die beiden Arrays sollen in einer Dimension kompatibel sein, wenn sie dieselbe Größe in der Dimension haben oder wenn eines der Arrays in dieser Dimension die Größe 1 hat.
- Die Arrays können zusammen übertragen werden, wenn sie in allen Dimensionen kompatibel sind.
- Nach dem Senden verhält sich jedes Array so, als hätte es eine Form, die dem Elementwisemaximum der Formen der beiden Eingabearrays entspricht.,
- In jeder Dimension, in der ein Array die Größe 1 und das andere Array die Größe größer als 1 hatte, verhält sich das erste Array so, als würde es entlang dieser Dimension kopiert
Wenn diese Erklärung keinen Sinn ergibt, versuchen Sie, die Erklärung zu lesenaus dem Dokumentoder dieser Erklärung.
Funktionen, die Rundfunk unterstützen, werden als universelle Funktionen bezeichnet. Sie können findendie Liste aller universellen Funktionenin der Dokumentation.,
Hier sind einige Anwendungen von Broadcasting:
Broadcasting macht Ihren Code normalerweise prägnanter und schneller, daher sollten Sie sich bemühen, ihn nach Möglichkeit zu verwenden.
Numpy Documentation
Dieser kurze Überblick hat viele der wichtigen Dinge angesprochen, die Sie über numpy wissen müssen, ist aber noch lange nicht vollständig. Schauen Sie sich thenumpy referenceto viel mehr über numpy.
SciPy
Numpy bietet ein leistungsstarkes mehrdimensionales Array und grundlegende Tools zum Berechnen und Bearbeiten dieser Arrays.,SciPybuilds auf diese, und provideeine große Anzahl von Funktionen, die auf numpy Arrays arbeiten und sind nützlich fürverschiedene Arten von wissenschaftlichen und technischen Anwendungen.
Der beste Weg, sich mit SciPy vertraut zu machen, ist, die Dokumentation zu durchsuchen.Wir werden einige Teile von SciPy hervorheben, die Sie für diese Klasse nützlich finden könnten.
Bildoperationen
SciPy bietet einige grundlegende Funktionen für die Arbeit mit Bildern.Beispielsweise verfügt es über Funktionen zum Lesen von Bildern von der Festplatte in Numpy-Arrays, zum Schreiben von Numpy-Arrays als Images auf die Festplatte und zum Ändern der Größe von Images.,Hier ist ein einfaches Beispiel, das zeigt diese Funktionen:
MATLAB-Dateien
Mit den Funktionen scipy.io.loadmat
und scipy.io.savemat
können Sie MATLAB-Dateien lesen und überschreiben. Sie können darüber lesenin der Dokumentation.
Abstand zwischen Punkten
SciPy definiert einige nützliche Funktionen zur Berechnung von Abständen zwischen Punktsätzen.,
Die Funktion scipy.spatial.distance.pdist
berechnet den Abstand zwischen allen Paarenvon Punkten in einem bestimmten Satz:
Sie können alle Details zu dieser Funktion lesen.in der Dokumentation.
Eine ähnliche Funktion (scipy.spatial.distance.cdist
) berechnet den Abstand zwischen allen Paarenüber zwei Sätze von Punkten; Sie können darüber lesenin der Dokumentation.
Matplotlib
Matplotlib ist ein Plotten library.In dieser Abschnitt gibt eine kurze Einführung in dasmatplotlib.pyplot
– Modul, das ein Plotsystem ähnlich dem von MATLAB bereitstellt.,
Plotten
Die wichtigste Funktion in matplotlib ist plot
,mit der Sie 2D-Daten zeichnen können. Hier ist ein einfaches Beispiel:
Wenn Sie diesen Code ausführen, wird das folgende Diagramm erstellt:
Mit nur ein wenig zusätzlicher Arbeit können wir problemlos mehrere Zeilen gleichzeitig zeichnen und einen Titel, eine Legende und Achsenbeschriftungen hinzufügen:
Sie können viel mehr über die plot
functionin der Dokumentation.,
Subplots
Mit der Funktion subplot
können Sie verschiedene Dinge in derselben Abbildung darstellen.Hier ist ein Beispiel:
Sie können viel mehr über die subplot
Funktion lesen.
Bilder
Mit der Funktion imshow
können Sie Bilder anzeigen. Hier ist ein Beispiel: