Tento návod byl původně přispěl Justin Johnson.
pro všechny úkoly v tomto kurzu použijeme programovací jazyk Python.Python je skvělý univerzální programovací jazyk sám o sobě, ale pomoc několika populárních knihoven (numpy, scipy, matplotlib) se stává výkonnýmprostředí pro vědecké výpočty.,
očekáváme, že mnoho z vás bude mít nějaké zkušenosti s Pythonem a numpy;pro zbytek z vás, tato sekce bude sloužit jako rychlý rychlokurz na pro programovací jazyk Python a jeho využití pro scientificcomputing. Představíme také notebooky, které jsou velmi pohodlným způsobemtrávit s kódem Python. Někteří z vás mohou mít předchozí znalosti v jiné jazyce, v takovém případě doporučujeme také odkazování:NumPy pro Matlab uživatelů,Python pro R uživatelů, a/orPython pro SAS uživatelů.,
- Seznamy
- Slovníky
- Nastaví
- n-Tic
- Pole
- Pole indexování
- datové typy
- Array math
- Vysílání
- Numpy Dokumentace
- Obrázek operace
- MATLAB soubory
- Vzdálenost mezi body
- Kreslení
- Subplots
- Obrázky
Jupyter a Colab Notebooky
předtím, Než jsme se ponořit do Python, rádi bychom se krátce mluvit o notebooky.,Jupyter notebook umožňuje psát a spustitpython kód lokálně ve webovém prohlížeči. Jupyter notebooksmake to velmi snadné pohrát s kódem a provést jej v bitsand kusů; z tohoto důvodu jsou široce používány v scientificcomputing.Colab na druhé straně je příchutí notebooků Google Jupyter, které jsou zvláště vhodné pro obrábění a analýzu dat a které běží zcela v cloudu.,Colab je v podstatě Jupyter notebooku na steroidy: je to zdarma, nevyžaduje žádné nastavení,přichází předinstalovaný s mnoha balíčky, je snadno sdílet s celým světem,a těží z volného přístupu na hardwarové akcelerátory jako Gpu a TPUs (s některými výhradami).
spusťte výukový program v Colabu (doporučeno). Pokud chcete tento tutoriál spustit úplně v Colabu, klikněte na odznak Open in Colab
v horní části této stránky.
spusťte výukový program v notebooku Jupyter., Pokud budete chtít spustit notebook, lokálně s Jupyter, ujistěte se, že vaše virtuální prostředí je správně nainstalován (viz pokyny k instalaci), aktivovat ji, a pak spustit pip install notebook
nainstalovat Jupyter notebooku. Poté otevřete notebook a stáhněte jej do adresáře podle vašeho výběru kliknutím pravým tlačítkem myši na stránku a výběrem Save Page As
. Pak cd
do tohoto adresáře a spusťte jupyter notebook
.
To by mělo automaticky spustit notebook, server na .,Pokud vše fungovalo správně, měli byste vidět obrazovku, jako je tato, zobrazující všechnydostupné notebooky v aktuálním adresáři. Klikněte na
jupyter-notebook-tutorial.ipynb
a postupujte podle pokynů v notebooku. V opačném případě můžete pokračovat ve čtenítutoriál s úryvky kódu níže.
Python
Python je programovací jazyk na vysoké úrovni, dynamicky napsaný multiparadigm.Python kód je často řekl, aby byl téměř jako pseudokódu, protože umožňuje, abyste vyjádřit velmi silné myšlenky v několika málo řádků kódu, přičemž je veryreadable., Jako příklad, zde je implementace klasické quicksortalgorithm v Pythonu:
Python verze
v Lednu 1, 2020, Python oficiálně ukončil podporu pro python2
.Pro tuto třídu bude veškerý kód používat Python 3.7. Ujistěte se, že jste prošli pokyny pro nastavenía správně nainstalované virtuální prostředí python3
před pokračováním v tomto tutoriálu.Po aktivaci prostředí můžete znovu zkontrolovat verzi Pythonu na příkazovém řádku spuštěním python --version
.,
základní datové typy
stejně jako většina jazyků má Python řadu základních typů včetně celých čísel, plováků,booleans a řetězců. Tyto datové typy se chovají způsoby, které jsouznámý z jiných programovacích jazyků.
Čísla: Celá čísla a plave fungovat, jak byste očekávali od jiných jazycích:
Všimněte si, že na rozdíl od mnoha jazyky, Python nemá unární přírůstek (x++
)nebo sníží (x--
) operátory.
Python má také vestavěné typy pro složitá čísla;všechny podrobnosti najdete v dokumentaci.,
Boolean: Python implementuje všechny obvyklé operátory pro Booleovské logiky,ale používá anglická slova, spíše než symboly (&&
||
, atd.):
Struny: Python má velkou podporu pro řetězce:
String objekty mají spoustu užitečných metod; například:
zde najdete seznam string metody v dokumentaci.
kontejnery
Python obsahuje několik vestavěných typů kontejnerů: seznamy, slovníky, sady a tuply.,
Seznamy
seznam je Python ekvivalent pole, ale je resizeableand může obsahovat prvky různých typů:
Jako obvykle, můžete najít všechny detaily o listsin dokumentace.
Krájení:kromě přístupu k seznamu prvků, jeden v době, Python providesconcise syntaxe pro přístup k sublists; toto je známé jako krájení:
My uvidíme, krájení opět v souvislosti s numpy pole.,
Smyčky: můžete smyčku přes prvky seznamu, jako je tato:
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Pokud chcete přístup k indexu každého prvku v těle smyčky,použít vestavěný-v enumerate
funkce:
Seznam comprehensions:Při programování, často chceme transformovat jednoho typu dat do jiného.,Jako jednoduchý příklad, zvažte následující kód, který vypočítá mocniny:
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
můžete Si tento kód jednodušší použití seznamu s porozuměním:
nums = squares = print(squares) # Prints
Seznam comprehensions může také obsahovat podmínky:
nums = even_squares = print(even_squares) # Prints ""
Slovníky
slovník obchodech (klíč, hodnota) páry, podobně jako Map
v Java oran objektu v Javascriptu., Můžete jej použít takto:
najdete vše, co potřebujete vědět o slovníkechv dokumentaci.
Smyčky: To je jednoduché iteraci přes klíče ve slovníku:
Pokud chcete přístup k klíče a jejich odpovídající hodnoty, použijte items
metoda:
Dictionary comprehensions:Tyto jsou podobné jako list comprehensions, ale umožní snadno constructdictionaries. Například:
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}"
Nastaví
sada je neuspořádané kolekce odlišné prvky., Jako jednoduchý příklad, celou tuhle nemocnici! následující:
Jako obvykle, vše, co chcete vědět o sady mohou být otcové dokumentace.,
Smyčky:Iterace sada má stejnou syntaxi jako iterace seznamu;nicméně od množiny jsou neuspořádané, nelze učinit předpoklady o orderin, které navštívíte prvky sada:
animals = {'cat', 'dog', 'fish'}for idx, animal in enumerate(animals): print('#%d: %s' % (idx + 1, animal))# Prints "#1: fish", "#2: dog", "#3: cat"
Nastavte comprehensions:Jako seznamy a slovníky, můžeme snadno sestrojit pomocí sady sada comprehensions:
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
n-Tic
n-tice je (neměnné) uspořádaný seznam hodnot.,N-tice je v mnoha ohledech podobný seznam; jedním z nejdůležitějších rozdílů je thattuples mohou být použity jako klíče ve slovnících a jako prvky množiny, zatímco seznamy nemohou.Zde je triviální příklad:
dokumentace obsahuje více informací o tuplech.
Funkce
Python funkce jsou definovány pomocí def
klíčové slovo. Například:
často definujeme funkce, které budou mít volitelné argumenty klíčových slov, například:
v dokumentaci je mnohem více informací o funkcích Pythonu.,
třídy
syntaxe pro definování tříd v Pythonu je přímočará:
v dokumentaci si můžete přečíst mnohem více o třídách Pythonu.
Numpy
Numpy je základní knihovny pro vědecké výpočty v Pythonu.Poskytuje vysoký výkon multidimenzionální pole objektu, a nástroje pro práci s thesearrays. Pokud jste již obeznámeni s MATLAB, můžete najíttento tutoriál užitečný pro začátek s Numpy.
Pole
numpy pole je mřížka hodnoty, všechny stejného typu, a je indexované n-tice ofnonnegative celá čísla., Počet rozměrů je hodnost pole; tvar pole je Tice celých čísel, která udává velikost pole podél každé dimenze.
můžeme inicializovat pole numpy z vnořených seznamů Pythonu a přístupové prvky pomocí hranatých závorek:
Numpy také poskytuje mnoho funkcí pro vytváření polí:
v dokumentaci si můžete přečíst další metody vytváření polí.
indexování pole
Numpy nabízí několik způsobů indexování do polí.
krájení: podobně jako Python seznamy, numpy pole mohou být plátky.,Protože pole může být vícerozměrné, musíte zadat kousek pro každou dimensionof pole:
můžete také smíchat číslo indexování s plátkem indexování.Tím však získáte řadu nižších hodností než původní pole.Všimněte si, že toto je zcela odlišné od toho, co MATLAB zpracovává arrayslicing:
Číslo pole indexování:Když si index do numpy pole pomocí krájení, výsledné pole viewwill vždy být pole původního pole. Naproti tomu celočíselné arrayindexing umožňuje vytvářet libovolná pole pomocí dat z jinéhoarray., Zde je příklad:
Jeden užitečný trik s celočíselné pole indexování je výběr nebo mutující oneelement z každého řádku matice:
Boolean pole indexování:Boolean pole indexování umožňuje vybrat libovolné prvky pole.Tento typ indexování se často používá k výběru prvků pole, které splňují určitou podmínku. Zde je příklad:
pro stručnost jsme vynechali mnoho podrobností o indexování pole numpy; pokud se chcete dozvědět více, měli byste si přečíst dokumentaci.
datové typy
každé pole numpy je mřížka prvků stejného typu.,Numpy poskytuje velkou sadu číselných datových typů, které můžete použít k vytvoření polí.Numpy se snaží uhodnout datový typ při vytváření pole, ale funkce, které constructarrays obvykle také obsahují volitelný argument explicitně specifikovat datatype.Zde je příklad:
v dokumentaci si můžete přečíst vše o datových typech numpy.,
Array math
Základní matematické funkce pracují elementwise na pole, a jsou availableboth jako provozovatel přetížení a jako funkce v numpy modulu:
Všimněte si, že na rozdíl od prostředí MATLAB, *
je elementwise násobení, ne matic při násobení. Místo toho používáme funkci dot
k výpočtu innerproduktů vektorů, k násobení vektoru maticí a matic., dot
je k dispozici jako funkce v numpymodule a jako metoda instance pole objekty:
Numpy nabízí mnoho užitečných funkcí pro provádění výpočtů onarrays; jedním z nejvíce užitečné, je sum
:
můžete najít úplný seznam matematických funkcí poskytovaných numpyin dokumentace.
kromě výpočetních matematických funkcí pomocí polí často potřebujeme přetvořit nebo jinak manipulovat s daty v polích., Nejjednodušší partner tento typ operace je transpozice matice; transpozice matice,stačí použít T
atribut pole, objekt:
Numpy nabízí mnoho dalších funkcí pro manipulaci s pole; – můžete vidět úplný listin dokumentace.
Broadcasting
Broadcasting je výkonný mechanismus, který umožňuje numpy pracovat s poli differentshapes při provádění aritmetických operací. Často máme menší pole a alarger pole, a chceme použít menší pole vícekrát provést některé operacena větším poli.,
například předpokládejme, že chceme do každého z nich přidat konstantní vektor. Mohli bychom to udělat takto:
To funguje; nicméně, když matice x
je velmi velký, výpočetní explicitní zacyklení Python může být pomalé. Všimněte si, že přidáním vektoru v
každý řádek maticex
je ekvivalentní k vytvoření matice vv
stohování více kopií v
svisle,pak se provádí elementwise shrnutí x
vv
., Jsme mohli realizovat tento, jako je tento:
Numpy vysílání nám umožňuje provést tento výpočet bez actuallycreating více kopií v
., Zvažte tuto verzi, pomocí vysílání:
Na řádek y = x + v
funguje, i když x
má tvar (4, 3)
v
má tvar(3,)
vzhledem k vysílání; tato linka funguje jako v
vlastně měl tvar (4, 3)
,kde každá řada byla kopie v
a součet byl proveden elementwise.,
Vysílání dvou matic spolu se řídí těmito pravidly:
- Pokud pole nemají stejné hodnoty, předřadit tvar nižší hodnost arraywith 1s, dokud oba tvary mají stejnou délku.
- obě pole jsou prý kompatibilní v dimenzi, pokud mají stejnou velikost v dimenzi, nebo pokud má jedno z polí Velikost 1 v této dimenzi.
- pole mohou být vysílána společně, pokud jsou kompatibilní ve všech rozměrech.
- po vysílání se každé pole chová, jako by mělo tvar rovnající se elementwisemaximu tvarů dvou vstupních polí.,
- V nějaké dimenzi, kde jedno pole měl velikost 1 a ostatní pole mělo velikost větší než 1,první pole se chová, jako kdyby to byly zkopírovány spolu, že rozměr
Pokud je toto vysvětlení nedává smysl, zkuste čtení explanationfrom na documentationor toto vysvětlení.funkce
podporující vysílání jsou známé jako univerzální funkce. Můžete najítseznam všech univerzálních funkcív dokumentaci.,
Zde jsou některé aplikace vysílání:
Vysílání obvykle dělá váš kód stručnější a rychlejší, takže měli snažit používat ho tam, kde je to možné.
numpy Documentation
tento stručný přehled se dotkl mnoha důležitých věcí, které potřebujete vědět o numpy, ale zdaleka není úplný. Podívejte se na další informace o numpy.
SciPy
Numpy poskytuje vysoce výkonné multidimenzionální pole a základní nástroje propočítat a manipulovat s těmito poli.,SciPybuilds na to, a poskytujevelké množství funkcí, které pracují na numpy polích a jsou užitečné prorůzné typy vědeckých a inženýrských aplikací.
nejlepší způsob, jak se seznámit s SciPy je tobrowse dokumentaci.Zvýrazníme některé části SciPy, které byste pro tuto třídu mohli najít užitečné.
operace s obrázky
SciPy poskytuje některé základní funkce pro práci s obrázky.Má například funkce pro čtení obrázků z disku do polí numpy,zápis polí numpy na disk jako obrázky a změnu velikosti obrázků.,Zde je jednoduchý příklad, který předvádí tyto funkce:
MATLAB soubory
funkce scipy.io.loadmat
scipy.io.savemat
umožní vám číst a napsat MATLAB soubory. Můžete si o nich přečíst v dokumentaci.
vzdálenost mezi body
SciPy definuje některé užitečné funkce pro výpočet vzdáleností mezi množinami bodů.,
funkce scipy.spatial.distance.pdist
vypočítá vzdálenost mezi všechny pairsof body v dané množině:
můžete Si přečíst všechny podrobnosti o této functionin dokumentace.
podobná funkce (scipy.spatial.distance.cdist
) vypočítá vzdálenost mezi všemi páryacross dvě sady bodů; o tom si můžete přečíst v dokumentaci.
Matplotlib
Matplotlib je vykreslování knihovna.V této části podat stručný úvod do matplotlib.pyplot
modul,který poskytuje vykreslování systém podobný systému MATLAB.,
Vykreslování
nejdůležitější funkce v matplotlib je plot
,který umožňuje vykreslit 2D data. Zde je jednoduchý příklad:
tento kód vytvoří následující graf:
S jen trochu práce navíc můžeme snadno vykreslit více linesat jednou, a přidat název, legenda, popisky os:
můžete Si přečíst mnohem více o plot
functionin dokumentace.,
Subplots
pomocí funkce subplot
můžete vykreslit různé věci na stejném obrázku.Zde je příklad:
můžete Si přečíst mnohem více o subplot
functionin dokumentace.
obrázky
pro zobrazení obrázků můžete použít funkci imshow
. Zde je příklad: