Acest tutorial a fost inițial contribuit de Justin Johnson.
vom folosi limbajul de programare Python pentru toate sarcinile din acest curs.Python este un mare general-scop limbaj de programare pe cont propriu, dar cu thehelp de câteva biblioteci populare (numpy, scipy, matplotlib) devine un powerfulenvironment pentru calcul științific.,
ne așteptăm ca mulți dintre voi să aibă experiență cu Python și numpy;pentru restul, această secțiune va servi ca un curs rapid pentru ambele limbaje de programare Python și utilizarea sa pentru calculul științific. Vom introduce, de asemenea, notebook-uri, care sunt un mod foarte convenabilde tinkering cu codul Python. Unii dintre voi pot avea cunoștințe anterioare în adifferent language, caz în care vă recomandăm,de asemenea, referențiere:NumPy pentru utilizatorii Matlab, Python pentru utilizatorii R, și/orPython pentru utilizatorii SAS.,
- Liste
- Dicționare
- Seturi
- Tupluri
- Array
- Array indexare
- tipuri de date
- Array matematica
- Difuzarea
- Numpy Documentare
- Imagine operațiunile
- MATLAB fișierele
- Distanța între puncte
- Trasarea
- Subplots
- Imagini
Jupyter și Colab Notebook-uri
Înainte de a se arunca cu capul în Python, am vrea să vorbim pe scurt despre notebook-uri.,Un notebook Jupyter vă permite să scrieți și să executațipython cod local în browserul dvs. web. Jupyter notebooksmake, este foarte ușor să se joace cu cod si sa-l execute în bitsand piese; pentru acest motiv, ele sunt utilizate pe scară largă în scientificcomputing.Colab, pe de altă parte, este Google aroma ofJupyter notebook-uri, care este deosebit de potrivit pentru machinelearning și analiză a datelor și care rulează în întregime în cloud.,Colab este practic Jupyter notebook-ul pe steroizi: este gratuit, nu necesită instalare,vine preinstalat cu mai multe pachete, este ușor de a împărtăși cu lumea,și beneficiază de acces gratuit la acceleratoare hardware ca Gpu-uri și TPUs (cu unele limitări).
rulați Tutorial în Colab (recomandat). Dacă doriți să rulați acest tutorial în întregime în Colab, faceți clic pe insigna Open in Colab
din partea de sus a acestei pagini.
rulați Tutorial în notebook Jupyter., Dacă doriți să rulați notebook-ul local cu Jupyter, asigurați-vă că mediul virtual este instalat corect (conform instrucțiunilor de configurare), activați-l, apoi executați pip install notebook
pentru a instala Jupyter notebook. Apoi, deschideți notebook-ul și descărcați-l într-un director la alegere făcând clic dreapta pe pagină și selectând Save Page As
. Apoi cd
în acel director și rulați jupyter notebook
.
aceasta ar trebui să lanseze automat un server de notebook-uri la .,Dacă totul a funcționat corect, ar trebui să vedeți un ecran ca acesta, care să arate totulanotebookurile disponibile în directorul curent. Faceți clic pe
jupyter-notebook-tutorial.ipynb
și urmați instrucțiunile din notebook. În caz contrar, puteți continua să citițitutorial cu fragmente de cod de mai jos.Python este un nivel înalt, tastat dinamic limbaj de programare multiparadigm.Codul Python este adesea declarat a fi aproape ca pseudocodul, deoarece vă permite să exprimați idei foarte puternice în foarte puține linii de cod, fiind în același timp foarte lizibil., Ca un exemplu, aici este o punere în aplicare a clasic quicksortalgorithm în Python:
Python versiuni
Ca de Janurary 1, 2020, Python a scăzut în mod oficial sprijinul pentru python2
.Pentru această clasă tot codul va folosi Python 3.7. Asigurați-vă că ați trecut prin instrucțiunile de configurare și ați instalat corect un mediu virtual python3
înainte de a continua acest tutorial.Puteți să verificați versiunea Python în linia de comandă după activarea environmentby de funcționare python --version
.,
tipuri de date de bază
la fel ca majoritatea limbilor, Python are un număr de tipuri de bază,inclusiv numere întregi, flotoare, booleene și șiruri de caractere. Aceste tipuri de date se comportă în moduri care suntfamiliar din alte limbaje de programare.
Numere: numere Întregi și plutește funcționează așa cum vă așteptați din alte limbi:
Rețineți că, spre deosebire de multe limbi, Python nu au unari de incrementare (x++
)sau descreștere (x--
) operatorii.Python are, de asemenea, Tipuri încorporate pentru numere complexe;puteți găsi toate detaliileîn documentație.,
Booleene: Python pune în aplicare toate de obicei operatorii de logică Booleană,dar foloseste cuvinte în limba engleză, mai degrabă decât simboluri (&&
, ||
, etc.):
Strings: Python are un mare suport pentru strings:
obiectele String au o grămadă de metode utile; de exemplu:
Puteți găsi o listă cu toate metodele string în documentație.Python include mai multe tipuri de containere încorporate: liste, dicționare, seturi și tupluri.,
Liste
O listă este Python echivalent dintr-o serie, dar este resizeableand poate conține elemente de tipuri diferite:
Ca de obicei, puteți găsi toate detaliile despre listsin documentația.
Feliere:În plus față de accesul la lista de elemente, unul la un moment dat, Python providesconcise sintaxa pentru a accesa subliste; acest lucru este cunoscut sub numele de feliere:
Vom vedea feliere din nou în contextul numpy tablouri.,
Bucle: puteți bucla asupra elementelor dintr-o listă ca aceasta:
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Dacă vrei să ai acces la indicele de fiecare element în organism de o buclă,utilizați built-in enumerate
funcția:
List comprehensions:Atunci când programare, frecvent vrem să transformăm un tip de date în altul.,Ca un simplu exemplu, să considerăm următorul cod care calculează pătratul numerelor:
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
puteți face acest cod, simplu, folosind o listă de înțelegere:
nums = squares = print(squares) # Prints
List comprehensions, de asemenea, poate conține condiții:
nums = even_squares = print(even_squares) # Prints ""
Dicționare
Un dicționar magazine (cheie, valoare) perechi, similar cu un Map
în Java oran obiect în Javascript., Puteți să-l utilizați astfel:
puteți găsi tot ce trebuie să știți despre dicționareîn documentație.dacă doriți acces la chei și valorile corespunzătoare ale acestora, utilizați metoda items
:
comprehensions dicționar: acestea sunt similare cu lista comprehensions, dar vă permit să construiți cu ușurințădicționare. De exemplu:
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}"
seturi
un set este o colecție neordonată de elemente distincte., Ca un exemplu simplu, luați în considerareurmătoarele:
ca de obicei, tot ce doriți să știți despre seturi pot fi găsiteîn documentație.,
Bucle:Iterarea peste un set are aceeași sintaxă ca iterarea peste o listă;cu toate acestea, deoarece seturi sunt neordonate, nu se pot face presupuneri despre pentruîn care vizitați elemente de set:
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:Cum ar fi liste și dicționare, putem construi cu ușurință folosind seturi set comprehensions:
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
Tupluri
Un tuplu este o (imuabil) lista ordonata de valori.,Un tuplu este în multe feluri similar cu o listă; una dintre cele mai importante diferențe este astatuplurile pot fi folosite ca chei în dicționare și ca elemente de seturi, în timp ce listele nu pot.Iată un exemplu banal:
documentația are mai multe informații despre tupluri.funcțiile Python sunt definite folosind cuvântul cheie def
. De exemplu:
vom defini adesea funcții pentru a lua argumente opționale pentru cuvinte cheie, ca aceasta:
există mult mai multe informații despre funcțiile Python în documentație.,
clase
sintaxa pentru definirea claselor în Python este simplă:
puteți citi mult mai multe despre clasele Python în documentație.
Numpy
Numpy este biblioteca de bază pentru calcul științific în Python.Acesta oferă o înaltă performanță matrice multidimensionale obiect, și instrumente pentru a lucra cu thesearrays. Dacă sunteți deja familiarizat cu MATLAB, s-ar putea găsi acest tutorial util pentru a începe cu Numpy.
matrice
o matrice numpy este o grilă de valori, toate de același tip, și este indexat de un tuplu ofnonnegative întregi., Numărul de dimensiuni este rangul matricei; forma unei matrice este un tuplu de numere întregi care dau dimensiunea matricei de-a lungul fiecărei dimensiuni.putem inițializa matricele numpy din listele Python imbricate și putem accesa elemente folosind paranteze pătrate:
Numpy oferă, de asemenea, multe funcții pentru a crea matrice:
puteți citi despre alte metode de creare a matricei în documentație.
indexare matrice
Numpy oferă mai multe moduri de a indexa în matrice.
feliere: Similar cu listele Python, matricele numpy pot fi feliate.,Deoarece Matricele pot fi multidimensionale, trebuie să specificați o felie pentru fiecare dimensiunedin matrice:
De asemenea, puteți amesteca indexarea întreagă cu indexarea feliilor.Cu toate acestea, acest lucru va produce o serie de rang inferior decât matricea originală.Rețineți că acest lucru este destul de diferit de modul în care MATLAB mânere arrayslicing:
Integer array indexare:Când vă indice în numpy matrice folosind feliere, array viewwill fi întotdeauna un subarray de matrice inițială. În schimb, întregul arrayindexing vă permite să construiți matrice arbitrare folosind datele de la altularray., Iată un exemplu:
un truc util cu indexare matrice întreagă este selectarea sau mutarea uneelement din fiecare rând al unei matrice:
indexare matrice booleană:indexare matrice booleană vă permite să alegeți elemente arbitrare ale unei matrice.Frecvent, acest tip de indexare este utilizat pentru a selecta elementele unei matrice care satisfac o anumită condiție. Aici este un exemplu:
Pentru concizie ne-au lăsat o mulțime de detalii despre numpy matrice de indexare;dacă vrei să știi mai mult shouldread documentația.
tipuri de date
fiecare matrice numpy este o grilă de elemente de același tip.,Numpy oferă un set mare de tipuri de date numerice pe care le puteți utiliza pentru a construi matrice.Numpy încearcă să ghicească un tip de date atunci când creați o matrice, dar funcțiile care constructarrays includ, de obicei, de asemenea, un argument opțional pentru a specifica în mod explicit tipul de date.Aici este un exemplu:
puteți citi totul despre numpy datatypesîn documentația.,
Array matematica
de Bază funcții matematice opera elementwise pe tablouri, și sunt availableboth ca operator de suprasarcini și ca funcții în numpy modulul:
Rețineți că, spre deosebire de MATLAB, *
este elementwise de multiplicare, nu matrixmultiplication. Vom folosi în loc de dot
funcția pentru a calcula innerproducts de vectori, pentru a înmulți un vector cu o matrice, și tomultiply matrici., dot
este disponibil atât ca o funcție în numpymodule și ca o metodă de exemplu de matrice de obiecte:
Numpy oferă multe funcții utile pentru efectuarea de calcule onarrays; una dintre cele mai utile este sum
:
puteți găsi lista completă de funcții matematice oferite de numpyin documentația.
În afară de calculul funcțiilor matematice folosind matrice, frecventtrebuie să remodelăm sau să manipulăm în alt mod datele din matrice., Cel mai simplu exampleof acest tip de operațiune este de transpunere a unei matrice; să transpună o matrice,pur și simplu utilizați T
atribut al unui obiect matrice:
Numpy oferă mult mai multe funcții pentru manipularea tablouri; puteți vedea întreaga listin documentația.difuzarea este un mecanism puternic care permite numpy să lucreze cu matrice de diferiteforme atunci când efectuați operații aritmetice. Frecvent avem o matrice mai mici și matrice alarger, și vrem să folosim matrice mai mici de mai multe ori pentru a efectua unele operationon matrice mai mare.,de exemplu, să presupunem că dorim să adăugăm un vector constant la fiecarerândul unei matrice. Acest lucru funcționează; cu toate acestea, atunci când matricea x
este foarte mare, calculând un python explicit loopin ar putea fi lent. Rețineți că adăugarea vector v
pentru fiecare rând al matriceix
este echivalentă cu formarea unei matrice vv
de stivuire mai multe copii ale v
vertical,apoi efectuarea elementwise însumarea x
și vv
., Am putea pune în aplicare această așa:
Numpy de radiodifuziune ne permite pentru a efectua acest calcul, fără actuallycreating mai multe copii ale v
., Luați în considerare această versiune, folosind emisie:
linie y = x + v
funcționează chiar dacă x
are forma (4, 3)
și v
are forma(3,)
din cauza de radiodifuziune; această linie funcționează ca daca v
de fapt, avea forma (4, 3)
,unde fiecare rând a fost o copie a v
, iar suma a fost efectuată elementwise.,
Difuzarea a două matrice împreună cum urmează aceste reguli:
- Dacă tablouri nu au același rang, prefix forma de rang inferior arraywith 1s până când ambele forme au aceeași lungime.se spune că cele două matrice sunt compatibile într-o dimensiune dacă au aceeași dimensiune în dimensiune sau dacă una dintre matrice are dimensiunea 1 în acea dimensiune.
- tablourile pot fi difuzate împreună dacă sunt compatibile în toate dimensiunile.
- după difuzare, fiecare matrice se comportă ca și cum ar avea o formă egală cu elementulwisemaximum de forme ale celor două matrice de intrare.,
- În orice dimensiune, în cazul în care o matrice a de dimensiune 1 și alte matrice a de dimensiune mai mare decât 1,prima serie se comportă ca în cazul în care au fost copiate de-a lungul dimensiunii respective
Dacă această explicație nu are sens, incearca sa citesti explanationfrom la documentationor această explicație.
funcțiile care acceptă difuzarea sunt cunoscute sub numele de funcții universale. Puteți găsilista tuturor funcțiilor universaleîn documentație.,iată câteva aplicații de difuzare:
difuzarea de obicei face Codul mai concis și mai rapid, astfel încât youshar trebui să se străduiască să-l folosească acolo unde este posibil.această scurtă trecere în revistă a atins multe dintre lucrurile importante pe care trebuie să le facețiștiți despre numpy, dar este departe de a fi completă. Check out thenumpy referencepentru a afla mai multe despre numpy.
SciPy
Numpy oferă o matrice multidimensională de înaltă performanță și instrumente de bază tocompute cu și manipula aceste matrice.,SciPybuilds pe acest lucru, și oferăun număr mare de funcții care funcționează pe matrice numpy și sunt utile pentrudiferite tipuri de aplicații științifice și de inginerie.cel mai bun mod de a vă familiariza cu SciPy estebrowse documentația.Vom evidenția unele părți ale SciPy pe care le-ați putea găsi utile pentru această clasă.
operații imagine
SciPy oferă câteva funcții de bază pentru a lucra cu imagini.De exemplu,are funcții pentru a citi imagini de pe disc în matrice numpy, pentru a scrie matrice numpy pe disc ca imagini și pentru a redimensiona imaginile.,Aici este un exemplu simplu care prezintă aceste funcții:
MATLAB fișierele
functii scipy.io.loadmat
și scipy.io.savemat
vă permite să citiți șiscrie MATLAB fișierele. Puteți citi despre eleîn documentație.
distanța dintre puncte
SciPy definește câteva funcții utile pentru calcularea distanțelor între seturi de puncte.,
funcția scipy.spatial.distance.pdist
calculează distanța între toate pairsof de puncte într-un set dat:
puteți citi toate detaliile despre acest funcțiunea documentația.
O funcție similară (scipy.spatial.distance.cdist
) calculează distanța între toate pairsacross două seturi de puncte; puteți citi despre itin documentația.
Matplotlib
Matplotlib este un complot bibliotecă.În această secțiune oferă o scurtă introducere în matplotlib.pyplot
module,care oferă un complot sistem similar cu cel din MATLAB.,cea mai importantă funcție din matplotlib esteplot
, care vă permite să trasați date 2D. Aici este un exemplu simplu:
Rularea acestui cod produce următoarele teren:
Cu doar un pic de munca in plus putem complot cu ușurință mai multe linesat o dată, și a adăuga un titlu, legenda și etichetele axelor:
puteți citi mai mult despre plot
funcțiunea documentația.,
Subploturi
puteți complota lucruri diferite în aceeași figură folosind funcția subplot
.Aici este un exemplu:
puteți citi mai mult despre subplot
funcțiunea documentația.
imagini
puteți utiliza funcția imshow
pentru a afișa imagini. Aici este un exemplu: