ten tutorial został pierwotnie napisany przez Justina Johnsona.
będziemy używać języka programowania Python do wszystkich zadań w tym kursie.Python jest doskonałym językiem programowania ogólnego przeznaczenia sam w sobie, ale z pomocą kilku popularnych bibliotek (numpy, scipy, matplotlib) staje się potężnym środowiskiem dla obliczeń naukowych.,
spodziewamy się, że wielu z was będzie miało trochę doświadczenia z Pythonem i numpy;dla reszty z was, Ta sekcja będzie służyć jako szybki kurs na temat zarówno języka programowania Python, jak i jego wykorzystania do obliczeń naukowych. Wprowadzimy również Notebooki, które są bardzo wygodnym sposobem majsterkowania z kodem Pythona. Niektórzy z was mogą mieć wcześniejszą znajomość innego języka, w takim przypadku zalecamy również nawiązanie do:NumPy dla użytkowników Matlab,Python dla użytkowników R i/orpython dla użytkowników SAS.,
- listy
- Słowniki
- Zestawy
- krotki
- Tablice indeksujące
- typy danych
- tablice matematyczne
- nadawanie
- numpy dokumentacja
- operacje na obrazach
- pliki MATLAB
- odległość między punktami
- wykresy
- obrazy
Notebooki Jupyter i Colab
zanim zagłębimy się w Pythona, chcielibyśmy krótko porozmawiać o notebookach.,Notatnik Jupyter pozwala zapisywać i wykonywać kod lokalnie w przeglądarce internetowej. Notebooki Jupyter bardzo łatwo majstrować przy użyciu kodu i wykonywać go w bitach i kawałkach; z tego powodu są one szeroko stosowane w komputerach naukowych.Colab z drugiej strony to smak Google ' a notebooków Jupyter, który szczególnie nadaje się do uczenia maszynowego i analizy danych i działa całkowicie w chmurze.,Colab to w zasadzie Notebook Jupyter na sterydach: jest darmowy, nie wymaga konfiguracji, jest preinstalowany z wieloma pakietami, jest łatwy do udostępnienia światu i korzysta z bezpłatnego dostępu do akceleratorów sprzętowych, takich jak GPU i TPU (z pewnymi zastrzeżeniami).
Uruchom Tutorial w Colab (zalecane). Jeśli chcesz uruchomić ten samouczek w całości w Colab, kliknij znaczek Open in Colab
na samej górze tej strony.
Uruchom Tutorial w notebooku Jupyter., Jeśli chcesz uruchomić Notebook lokalnie z Jupyter, upewnij się, że Twoje środowisko wirtualne jest zainstalowane poprawnie (zgodnie z instrukcjami konfiguracji), aktywuj je, a następnie uruchom pip install notebook
, aby zainstalować notebook Jupyter. Następnie otwórz notatnik i pobierz go do wybranego katalogu, klikając prawym przyciskiem myszy na stronie i wybierając Save Page As
. Następniecd
do tego katalogu i uruchom jupyter notebook
.
powinno to automatycznie uruchomić serwer notebooków pod adresem.,Jeśli wszystko działało poprawnie, powinieneś zobaczyć taki ekran, pokazujący wszystkie dostępne Notebooki w bieżącym katalogu. Kliknij
jupyter-notebook-tutorial.ipynb
I postępuj zgodnie z instrukcjami w notatniku. W przeciwnym razie, można kontynuować czytanie theutorial z fragmentów kodu poniżej.
Python
Python jest wieloparadigmowym językiem programowania wysokiego poziomu.Często mówi się, że kod Pythona jest prawie jak pseudokod, ponieważ pozwala wyrażać bardzo potężne pomysły w bardzo niewielu liniach kodu, a jednocześnie jest bardzo czytelny., Jako przykład, oto implementacja klasycznego quicksortalgorithm w Pythonie:
wersje Pythona
od 1 stycznia 2020 roku Python oficjalnie przestał wspierać python2
.Dla tej klasy cały kod będzie używał Pythona 3.7. Upewnij się, że zapoznałeś się z instrukcjami konfiguracji i poprawnie zainstalowałeś środowisko wirtualne python3
przed przystąpieniem do tego samouczka.Możesz dwukrotnie sprawdzić wersję Pythona w wierszu poleceń po aktywacji środowiska przez uruchomienie python --version
.,
podstawowe typy danych
podobnie jak większość języków, Python ma wiele podstawowych typów,w tym liczby całkowite, pływaki, booleany i ciągi znaków. Te typy danych zachowują się w sposób podobny do innych języków programowania.
Numbers: Integers and floats work as you would expect from other languages:
zauważ, że w przeciwieństwie do wielu języków, Python nie ma uniary increment (x++
)or decrement (x--
) operatory.
Python ma również wbudowane typy liczb złożonych;wszystkie szczegóły można znaleźć w dokumentacji.,
logika logiczna: Python implementuje wszystkie zwykłe operatory logiki logicznej,ale używa angielskich słów zamiast symboli (&&
,||
, itd.):
ciągi znaków: Python ma świetne wsparcie dla ciągów znaków:
Obiekty łańcuchowe mają kilka przydatnych metod; na przykład:
listę wszystkich metod łańcuchowych można znaleźć w dokumentacji.
kontenery
Python zawiera kilka wbudowanych typów kontenerów: listy, słowniki, zestawy i krotki.,
listy
lista jest Pythonowym odpowiednikiem tablicy, ale można ją zmieniać i może zawierać elementy różnych typów:
jak zwykle, możesz znaleźć wszystkie krwawe szczegóły dotyczące list w dokumentacji.
Slicing:oprócz dostępu do elementów listy pojedynczo, Python dostarcza skróconą składnię dostępu do podlist; jest to znane jako slicing:
zobaczymy slicing ponownie w kontekście tablic numpy.,
pętle: możesz zapętlić elementy listy w następujący sposób:
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Jeśli chcesz uzyskać dostęp do indeksu każdego elementu w ciele pętli,użyj wbudowanej funkcjienumerate
:
składanie List:podczas programowania często chcemy przekształcić jeden typ danych w inny.,Jako prosty przykład, rozważ następujący kod, który oblicza liczby kwadratowe:
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
możesz uprościć ten kod za pomocą rozumienia listy:
składanie listy może zawiera również warunki:
nums = even_squares = print(even_squares) # Prints ""
słowniki
słownik przechowuje pary (klucz, wartość), podobne doMap
w Javie lub obiekcie w JavaScript., Możesz go używać w następujący sposób:
w dokumentacji znajdziesz wszystko, co musisz wiedzieć o słownikach.
Loops: it is easy to iterate over the keys in a dictionary:
Jeśli chcesz uzyskać dostęp do kluczy i odpowiadających im wartości, użyj metody items
metoda:
składanie słownika:są one podobne do składania list, ale pozwalają na łatwe konstruowanie składań. Na przykład:
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}"
Zestawy
zbiór jest uporządkowanym zbiorem różnych elementów., Jako prosty przykład, rozważ następujące rzeczy:
jak zwykle wszystko, co chcesz wiedzieć o zestawach, można znaleźć w dokumentacji.,
pętle:iteracja nad zestawem ma taką samą składnię, jak iteracja nad listą;jednak ponieważ zestawy nie są uporządkowane, nie można przyjąć założeń co do kolejności, w jakiej odwiedzasz elementy zestawu:
składnie zestawów:podobnie jak listy i słowniki, możemy łatwo konstruować zestawy za pomocą składni zestawów:
iv
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
krotki
krotka jest (niezmienną) uporządkowaną listą wartości.,Krotka jest pod wieloma względami podobna do listy; jedną z najważniejszych różnic jest to, że krotki mogą być używane jako klucze w słownikach i jako elementy zestawów, podczas gdy listy nie.Oto trywialny przykład:
dokumentacja zawiera więcej informacji o krotkach.
funkcje
funkcje Pythona są definiowane za pomocą słowa kluczowegodef
. Na przykład:
często będziemy definiować funkcje, aby pobierały opcjonalne argumenty słów kluczowych, jak to:
w dokumentacji jest o wiele więcej informacji na temat funkcji Pythona.,
klasy
składnia definiowania klas w Pythonie jest prosta:
Możesz przeczytać więcej o klasach Pythona w dokumentacji.
Numpy
Numpy jest podstawową biblioteką informatyki naukowej w Python.It zapewnia wysokowydajny wielowymiarowy obiekt array oraz narzędzia do pracy z nimi. Jeśli jesteś już zaznajomiony z MATLAB, ten samouczek może okazać się przydatny, aby rozpocząć pracę z Numpy.
Tablice
tablica numpy jest siatką wartości, wszystkich tego samego typu i jest indeksowana krotką liczby całkowitej., Liczba wymiarów jest rangą tablicy; kształt tablicy jest krotką liczb całkowitych określającą rozmiar tablicy wzdłuż każdego wymiaru.
możemy inicjalizować tablice numpy z zagnieżdżonych list Pythona i uzyskiwać dostęp do elementów za pomocą nawiasów kwadratowych:
Numpy dostarcza również wiele funkcji do tworzenia tablic:
możesz przeczytać o innych metodach tworzenia tablic w dokumentacji.
indeksowanie tablic
Numpy oferuje kilka sposobów indeksowania tablic.
krojenie: podobnie jak listy Pythona, tablice numpy mogą być krojone.,Ponieważ tablice mogą być wielowymiarowe, musisz określić plasterek dla każdego wymiaru tablicy:
Możesz również mieszać indeksowanie całkowite z indeksowaniem plasterków.Jednak w ten sposób otrzymamy tablicę o niższej randze niż oryginalna tablica.Zauważ, że jest to zupełnie inne niż sposób, w jaki MATLAB obsługuje układanie tablic:
indeksowanie tablic całkowitych:gdy indeksujesz do tablic numpy za pomocą krojenia, wynikowy widok tablicy będzie zawsze podrzędny oryginalnej tablicy. Natomiast integer arrayindexing pozwala na konstruowanie dowolnych tablic przy użyciu danych z innej tablicy., Oto przykład:
jedną z przydatnych sztuczek z indeksowaniem tablicy całkowitej jest wybranie lub mutacja jednego elementu z każdego wiersza macierzy:
indeksowanie tablicy Boolean:indeksowanie tablicy Boolean pozwala wybrać dowolne elementy tablicy.Często ten typ indeksowania jest używany do wyboru elementów tablicy spełniających pewien warunek. Oto przykład:
dla zwięzłości pominęliśmy wiele szczegółów na temat indeksowania tablicy numpy;jeśli chcesz wiedzieć więcej, powinieneś przeczytać dokumentację.
typy danych
każda tablica numpy jest siatką elementów tego samego typu.,Numpy dostarcza duży zestaw numerycznych typów danych, które można wykorzystać do konstruowania tablic.Numpy próbuje odgadnąć typ danych podczas tworzenia tablicy, ale funkcje, które constructarrays zazwyczaj zawierają również opcjonalny argument jawnie określający typ danych.Oto przykład:
możesz przeczytać wszystko o numpy datatypesw dokumentacji.,
Matematyka tablicowa
podstawowe funkcje matematyczne działają elementwise na tablicach i są dostępne jako przeciążenia operatorów i jako funkcje w module numpy:
zauważ, że w przeciwieństwie do Matlaba,*
jest mnożeniem elementwise, a nie matrixmultiplikacją. Zamiast tego używamy funkcji dot
do obliczania wektorów wewnętrznych, mnożenia wektora przez macierz oraz wielokrotnych macierzy., dot
jest dostępny zarówno jako funkcja w numpymodule, jak i jako metoda instancyjna obiektów array:
Numpy dostarcza wiele przydatnych funkcji do wykonywania obliczeń na rays; jedną z najbardziej przydatnych jestsum
:
Możesz znaleźć pełną listę funkcji matematycznych dostarczonych przez numpyin w dokumentacji.
poza obliczaniem funkcji matematycznych za pomocą tablic często zmieniamy kształt lub w inny sposób manipulujemy danymi w tablicach., Najprostszym przykładem tego typu operacji jest transpozycja macierzy; aby transponować macierz, wystarczy użyć atrybutuT
obiektu array:
Numpy dostarcza wiele więcej funkcji do manipulowania macierzami; możesz zobaczyć pełną listę w dokumentacji.
nadawanie
nadawanie jest potężnym mechanizmem, który umożliwia numpy pracę z tablicami o różnych kształtach podczas wykonywania operacji arytmetycznych. Często mamy mniejszą tablicę i dużą tablicę i chcemy użyć mniejszej tablicy wiele razy, aby wykonać jakąś operację na większej tablicy.,
na przykład załóżmy, że chcemy dodać do każdej macierzy wektor stały. Możemy to zrobić tak:
to działa; jednak gdy matryca x
jest bardzo duża, obliczanie jawnego loopina Pythona może być powolne. Zauważ,że dodanie wektora v
do każdego wiersza macierzyx
jest równoznaczne z utworzeniem macierzy vv
przez ułożenie wielu kopii v
w pionie, a następnie wykonanie sumowania elementowego x
oraz vv
., Możemy zaimplementować to podejście w następujący sposób:
Numpy broadcasting pozwala nam wykonywać te obliczenia bez faktycznego tworzenia wielu kopii v
., Rozważ tę wersję, używając nadawania:
linia y = x + v
działa nawet jeśli x
ma kształt (4, 3)
I v
ma kształt(3,)
ze względu na nadawanie; linia ta działa tak,jakby v
faktycznie miała kształt (4, 3)
, gdzie każdy wiersz był kopią v
, a suma była wykonywana elementwise.,
nadawanie dwóch tablic razem odbywa się zgodnie z następującymi zasadami:
- Jeśli tablice nie mają tej samej rangi, poprzedzaj kształt tablicy o niższej randze 1s, aż oba kształty będą miały tę samą długość.
- mówi się, że dwie tablice są kompatybilne w wymiarze, jeśli mają ten sam rozmiar w wymiarze lub jeśli jedna z tablic ma rozmiar 1 w tym wymiarze.
- tablice mogą być transmitowane razem, jeśli są kompatybilne we wszystkich wymiarach.
- po nadaniu każda tablica zachowuje się tak, jakby miała kształt równy elementowi maksimum kształtów dwóch tablic wejściowych.,
- w dowolnym wymiarze, gdzie jedna tablica ma rozmiar 1, a druga ma rozmiar większy niż 1, pierwsza tablica zachowuje się tak, jakby została skopiowana wzdłuż tego wymiaru
Jeśli to wyjaśnienie nie ma sensu, spróbuj przeczytać wyjaśnienie z dokumentu lub tego wyjaśnienia.
funkcje obsługujące transmisję są znane jako funkcje uniwersalne. Możesz znaleźć listę wszystkich funkcji uniwersalnych w dokumentacji.,
oto kilka zastosowań nadawania:
nadawanie zazwyczaj sprawia, że kod jest bardziej zwięzły i szybszy, więc powinieneś starać się go używać tam, gdzie to możliwe.
dokumentacja Numpy
Ten krótki przegląd poruszył wiele ważnych rzeczy, które musisz wiedzieć o numpy, ale jest daleki od ukończenia. Zapoznaj się z naszą ofertą aby dowiedzieć się więcej o numpy.
SciPy
Numpy zapewnia wysokowydajną wielowymiarową tablicę i podstawowe narzędzia do obliczania i manipulowania tymi tablicami.,SciPybuilds on this, and providesa large of functions that operating on numpy arrays and are useful for different types of scientific and engineering applications.
najlepszym sposobem na zapoznanie się z SciPy jest zapoznanie się z dokumentacją.Podświetlimy niektóre części SciPy, które mogą okazać się przydatne dla tej klasy.
operacje na obrazach
SciPy udostępnia kilka podstawowych funkcji do pracy z obrazami.Na przykład, posiada funkcje do odczytu obrazów z dysku do tablic numpy,do zapisu tablic numpy na dysk jako obrazów i do zmiany rozmiaru obrazów.,Oto prosty przykład, który prezentuje te funkcje:
pliki MATLAB
funkcjescipy.io.loadmat
Iscipy.io.savemat
umożliwiają odczyt i zapis plików MATLAB. Możesz o nich przeczytać w dokumentacji.
odległość między punktami
SciPy definiuje kilka przydatnych funkcji do obliczania odległości między zbiorami punktów.,
funkcjascipy.spatial.distance.pdist
oblicza odległość między wszystkimi parami punktów w danym zbiorze:
możesz przeczytać wszystkie szczegóły dotyczące tej funkcji w dokumentacji.
podobna funkcja (scipy.spatial.distance.cdist
) oblicza odległość między wszystkimi parami w dwóch zestawach punktów; możesz o niej przeczytać w dokumentacji.
Matplotlib
Matplotlib jest wykresem library.In Ta sekcja zawiera krótkie wprowadzenie do modułumatplotlib.pyplot
, który zapewnia system kreślenia podobny do systemu MATLAB.,
rysowanie
najważniejszą funkcją w matplotlib jestplot
,która pozwala na rysowanie danych 2D. Oto prosty przykład:
uruchomienie tego kodu tworzy następujący wykres:
dzięki odrobinie dodatkowej pracy możemy łatwo wykreślić wiele linii jednocześnie i dodać etykiety tytułu, legendy i osi:
możesz przeczytać znacznie więcej o funkcji plot
w dokumentacji.,
podprogramy
możesz narysować różne rzeczy na tym samym rysunku za pomocą funkcjisubplot
.Oto przykład:
możesz przeczytać znacznie więcej o funkcji subplot
w dokumentacji.
obrazy
możesz użyć funkcjiimshow
do wyświetlania obrazów. Oto przykład: