Questo tutorial è stato originariamente contribuito da Justin Johnson.
Useremo il linguaggio di programmazione Python per tutte le assegnazioni in questo corso.Python è un ottimo linguaggio di programmazione generico da solo, ma con l’aiuto di alcune librerie popolari (numpy, scipy, matplotlib) diventa un ambiente potente per il calcolo scientifico.,
Ci aspettiamo che molti di voi avranno un po ‘ di esperienza con Python e numpy;per il resto di voi, questa sezione servirà come un rapido corso accelerato su boththe linguaggio di programmazione Python e il suo uso per scientificcomputing. Introdurremo anche i notebook, che sono un modo molto convenientedi armeggiare con il codice Python. Alcuni di voi potrebbero avere conoscenze precedenti in un linguaggio diverso,nel qual caso consigliamo anche di fare riferimento a:NumPy per gli utenti Matlab, Python per gli utenti R e/orPython per gli utenti SAS.,
- Liste
- Dizionari
- Set
- Tuple
- Array
- Array indicizzazione
- tipi di dati
- Array matematica
- Broadcasting
- Numpy Documentazione
- operazioni
- MATLAB file
- Distanza tra i punti
- Tramando
- Armi
- Immagini
Jupyter e Colab Notebook
Prima di tuffarci in Python, ci piacerebbe parlare brevemente del notebook.,Un notebook Jupyter consente di scrivere ed eseguirecodice Epython localmente nel browser Web. Jupyter notebooks rende molto facile armeggiare con il codice ed eseguirlo in bit e pezzi; per questo motivo sono ampiamente utilizzati nel calcolo scientifico.Colab d’altra parte è il sapore di notebook di Google che è particolarmente adatto per l’apprendimento delle macchine e l’analisi dei dati e che funziona interamente nel cloud.,Colab è fondamentalmente Jupyter notebook su steroidi: è gratuito,non richiede alcuna configurazione, viene preinstallato con molti pacchetti,è facile da condividere con il mondo, e beneficia di libero accesso agli acceleratori hardware come GPU e TPU (con alcuni avvertimenti).
Esegui il tutorial in Colab (consigliato). Se desideri eseguire questo tutorial interamente in Colab, fai clic sul badgeOpen in Colab
nella parte superiore di questa pagina.
Eseguire Tutorial in Jupyter Notebook., Se si desidera eseguire il notebook localmente con Jupyter, assicurarsi che l’ambiente virtuale sia installato correttamente (come da istruzioni di installazione), attivarlo, quindi eseguire pip install notebook
per installare Jupyter notebook. Quindi, apri il notebook e scaricalo in una directory a tua scelta facendo clic destro sulla pagina e selezionando Save Page As
. Quindicd
in quella directory ed eseguirejupyter notebook
.
Questo dovrebbe avviare automaticamente un server notebook su.,Se tutto ha funzionato correttamente, dovresti vedere una schermata come questa, che mostra tuttonote disponibili nella directory corrente. Fare clic su
jupyter-notebook-tutorial.ipynb
e seguire le istruzioni nel notebook. Altrimenti, puoi continuare a leggere thetutorial con frammenti di codice qui sotto.
Python
Python è un linguaggio di programmazione multiparadigm di alto livello, tipizzato dinamicamente.Si dice spesso che il codice Python sia quasi come lo pseudocodice, poiché consente di esprimere idee molto potenti in pochissime righe di codice pur essendo molto leggibile., Ad esempio, ecco un’implementazione del classico quicksortalgorithm in Python:
Versioni Python
A partire dal 1 gennaio 2020, Python ha ufficialmente abbandonato il supporto perpython2
.Per questa classe tutto il codice userà Python 3.7. Assicurati di aver seguito le istruzioni di installazionee installato correttamente un ambiente virtuale python3
prima di procedere con questo tutorial.Puoi ricontrollare la tua versione di Python alla riga di comando dopo aver attivato il tuo ambientecorrendo python --version
.,
Tipi di dati di base
Come la maggior parte delle lingue, Python ha un certo numero di tipi di base tra cui interi,float, booleani e stringhe. Questi tipi di dati si comportano in modi che sonofamiliare da altri linguaggi di programmazione.
Numbers: Interi e float funzionano come ci si aspetterebbe da altri linguaggi:
Si noti che, a differenza di molti linguaggi, Python non ha operatori di incremento unario (x++
)o decremento (x--
).
Python ha anche tipi incorporati per numeri complessi;puoi trovare tutti i dettagli nella documentazione.,
Booleani: Python implementa tutti gli operatori usuali per la logica booleana, ma usa parole inglesi piuttosto che simboli (&&
, ||
, ecc.):
Strings: Python ha un ottimo supporto per le stringhe:
Gli oggetti String hanno un sacco di metodi utili; per esempio:
Puoi trovare un elenco di tutti i metodi string nella documentazione.
Contenitori
Python include diversi tipi di contenitori incorporati: elenchi, dizionari, set e tuple.,
Liste
Una lista è l’equivalente Python di un array, ma è ridimensionabile e può contenere elementi di diversi tipi:
Come al solito, puoi trovare tutti i dettagli cruenti sulle listenella documentazione.
Slicing:Oltre ad accedere agli elementi della lista uno alla volta, Python fornisce la sintassi concisa per accedere alle sottoliste; questo è noto come slicing:
Vedremo di nuovo slicing nel contesto degli array numpy.,
Loop: È possibile ciclo sugli elementi di una lista come questa:
animals = for animal in animals: print(animal)# Prints "cat", "dog", "monkey", each on its own line.
Se si desidera accedere all’indice di ciascun elemento all’interno del corpo di un ciclo,utilizzare il built-in enumerate
funzione:
List comprehensions:Durante la programmazione, spesso vogliamo trasformare un tipo di dati in un altro.,Come semplice esempio, si consideri il seguente codice che calcola il quadrato di numeri:
nums = squares = for x in nums: squares.append(x ** 2)print(squares) # Prints
È possibile rendere il codice più semplice utilizzando un elenco di comprensione:
nums = squares = print(squares) # Prints
List comprehensions può anche contenere condizioni:
nums = even_squares = print(even_squares) # Prints ""
Dizionari
Un dizionario negozi (chiave, valore), coppie, simile a un Map
in Java oran oggetto in Javascript., Puoi usarlo in questo modo:
Puoi trovare tutto ciò che devi sapere sui dizionari nella documentazione.
Loop: È facile scorrere le chiavi in un dizionario:
Se si desidera accedere alle chiavi e ai loro valori corrispondenti, utilizzare il metodoitems
:
Comprensioni del dizionario:queste sono simili alle comprensioni delle liste, ma consentono di costruiredictionaries facilmente. Ad esempio:
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}"
Imposta
Un insieme è una raccolta non ordinata di elementi distinti., Come semplice esempio, considera quanto segue:
Come al solito, tutto ciò che vuoi sapere sui set può essere trovatonella documentazione.,
Loop:l’Iterazione su un set ha la stessa sintassi di scorrere un elenco;tuttavia, poiché i set sono disordinate, non è possibile fare ipotesi circa la orderin che si visita gli elementi del set:
animals = {'cat', 'dog', 'fish'}for idx, animal in enumerate(animals): print('#%d: %s' % (idx + 1, animal))# Prints "#1: fish", "#2: dog", "#3: cat"
Imposta la genericità:Come le liste e dizionari, si può facilmente costruire insiemi utilizzando set genericità:
from math import sqrtnums = {int(sqrt(x)) for x in range(30)}print(nums) # Prints "{0, 1, 2, 3, 4, 5}"
Tuple
una tupla è Una (immutabile) elenco ordinato di valori.,Una tupla è in molti modi simile a una lista; una delle differenze più importanti è che le tuple possono essere utilizzate come chiavi nei dizionari e come elementi di set, mentre le liste non possono.Ecco un esempio banale:
La documentazione ha più informazioni sulle tuple.
Funzioni
Le funzioni Python sono definite usando la parola chiavedef
. Ad esempio:
Spesso definiremo le funzioni per prendere argomenti di parole chiave opzionali, come questo:
Ci sono molte più informazioni sulle funzioni di Python nella documentazione.,
Classi
La sintassi per definire le classi in Python è semplice:
Puoi leggere molto di più sulle classi Python nella documentazione.
Numpy
Numpy è la libreria principale per il calcolo scientifico in Python.It fornisce un oggetto array multidimensionale ad alte prestazioni e strumenti per lavorare con thesearrays. Se hai già familiarità con MATLAB, potresti trovarequesto tutorial è utile per iniziare con Numpy.
Array
Un array numpy è una griglia di valori, tutti dello stesso tipo, ed è indicizzato da una tupla di interi non negativi., Il numero di dimensioni è il rango dell’array; lo shapeof un array è una tupla di numeri interi che danno la dimensione dell’array lungo ogni dimensione.
Possiamo inizializzare gli array numpy da elenchi Python nidificati e accedere agli elementi usando parentesi quadre:
Numpy fornisce anche molte funzioni per creare array:
Puoi leggere altri metodi di creazione di array nella documentazione.
Indicizzazione array
Numpy offre diversi modi per indicizzare in array.
Slicing:simile agli elenchi Python, gli array numpy possono essere tagliati.,Poiché gli array possono essere multidimensionali, è necessario specificare una slice per ogni dimensionedell’array:
È anche possibile combinare l’indicizzazione di interi con l’indicizzazione di slice.Tuttavia, così facendo produrrà una matrice di rango inferiore rispetto alla matrice originale.Si noti che questo è molto diverso dal modo in cui MATLAB gestisce arrayslicing:
Integer array indexing:Quando si indicizza in array numpy usando slicing, la vista dell’array risultante sarà sempre un sottoarray dell’array originale. Al contrario, integer arrayindexing consente di costruire array arbitrari utilizzando i dati da anotherarray., Ecco un esempio:
Un trucco utile con l’indicizzazione degli array interi è selezionare o mutare un elemento da ogni riga di una matrice:
Indicizzazione degli array booleani:l’indicizzazione degli array booleani consente di selezionare elementi arbitrari di un array.Spesso questo tipo di indicizzazione viene utilizzato per selezionare gli elementi di un array che soddisfano alcune condizioni. Ecco un esempio:
Per brevità abbiamo tralasciato molti dettagli sull’indicizzazione degli array numpy;se vuoi saperne di più dovresti leggere la documentazione.
Tipi di dati
Ogni array numpy è una griglia di elementi dello stesso tipo.,Numpy fornisce un ampio set di tipi di dati numerici che è possibile utilizzare per costruire array.Numpy tenta di indovinare un tipo di dati quando si crea un array, ma le funzioni che constructarrays di solito includono anche un argomento opzionale per specificare esplicitamente il tipo di dati.Ecco un esempio:
Puoi leggere tutto sui tipi di dati numpy nella documentazione.,
Array math
Funzioni matematiche di base operano elementwise su array, e sono availableboth come overload degli operatori e come funzioni nel modulo numpy:
Si noti che a differenza di MATLAB,*
è moltiplicazione elementwise, non matrixmultiplication. Usiamo invece la funzionedot
per calcolare i prodotti interni dei vettori, per moltiplicare un vettore per una matrice e per moltiplicare le matrici., dot
è disponibile sia come una funzione nel numpymodule e come un metodo di istanza di array di oggetti:
Numpy fornisce molte funzioni utili per l’esecuzione di calcoli onarrays; uno dei più utili è sum
:
È possibile trovare l’elenco completo di funzioni matematiche fornite dal numpyin la documentazione.
Oltre a calcolare le funzioni matematiche usando gli array, abbiamo spesso bisogno di rimodellare o manipolare i dati in array., L’esempio più semplice di questo tipo di operazione è la trasposizione di una matrice; per trasporre una matrice,è sufficiente utilizzare l’attributoT
di un oggetto array:
Numpy fornisce molte più funzioni per manipolare gli array; è possibile vedere l’elenco completo nella documentazione.
Broadcasting
Broadcasting è un potente meccanismo che consente a numpy di lavorare con array di diversiforme durante l’esecuzione di operazioni aritmetiche. Spesso abbiamo un array più piccolo e un array più grande e vogliamo utilizzare l’array più piccolo più volte per eseguire alcune operazioni sull’array più grande.,
Ad esempio, supponiamo di voler aggiungere un vettore costante ad ogni riga di una matrice. Potremmo farlo in questo modo:
Funziona; tuttavia quando la matricex
è molto grande, calcolare un loopin Python esplicito potrebbe essere lento. Si noti che l’aggiunta di vector v
per ogni riga della matricex
è equivalente a formare una matrice vv
con la sovrapposizione di più copie di v
verticalmente,poi l’esecuzione di elementwise sommatoria di x
e vv
., Potremmo implementare questo approccio in questo modo:
Numpy broadcasting ci consente di eseguire questo calcolo senza creare in realtà più copie div
., Considerare questa versione, utilizzando diffusione:
La riga y = x + v
funziona anche se x
è la forma (4, 3)
e v
è la forma(3,)
a causa di radiodiffusione; questa linea funziona come se v
in realtà aveva la forma (4, 3)
,dove ogni riga è una copia di v
, e la somma è stata eseguita elementwise.,
La trasmissione di due array insieme segue queste regole:
- Se gli array non hanno lo stesso rango, anteponi la forma dell’array di rango inferiore con 1s fino a quando entrambe le forme hanno la stessa lunghezza.
- Si dice che i due array siano compatibili in una dimensione se hanno la stessa dimensione nella dimensione o se uno degli array ha la dimensione 1 in quella dimensione.
- Gli array possono essere trasmessi insieme se sono compatibili in tutte le dimensioni.
- Dopo la trasmissione, ogni array si comporta come se avesse forma uguale all’elementwisemaximum di forme dei due array di input.,
- In qualsiasi dimensione in cui un array aveva dimensione 1 e l’altro array aveva dimensione maggiore di 1,il primo array si comporta come se fosse stato copiato lungo quella dimensione
Se questa spiegazione non ha senso, prova a leggere la spiegazionedalla documentazioneo questa spiegazione.
Le funzioni che supportano la trasmissione sono note come funzioni universali. Puoi trovarel’elenco di tutte le funzioni universalinella documentazione.,
Ecco alcune applicazioni di trasmissione:
La trasmissione in genere rende il codice più conciso e più veloce, quindi dovresti sforzarti di usarlo dove possibile.
Documentazione Numpy
Questa breve panoramica ha toccato molte delle cose importanti che devi conoscere su numpy, ma è tutt’altro che completa. Check out thenumpy referenceto scoprire molto di più su numpy.
SciPy
Numpy fornisce un array multidimensionale ad alte prestazioni e strumenti di base per calcolare e manipolare questi array.,SciPy costruisce su questo e fornisce un gran numero di funzioni che operano su array numpy e sono utili per diversi tipi di applicazioni scientifiche e ingegneristiche.
Il modo migliore per familiarizzare con SciPy è raccogliere la documentazione.Metteremo in evidenza alcune parti di SciPy che potresti trovare utili per questa classe.
Operazioni immagine
SciPy fornisce alcune funzioni di base per lavorare con le immagini.Ad esempio,ha funzioni per leggere le immagini dal disco in array numpy, per scrivere array numpy su disco come immagini e per ridimensionare le immagini.,Ecco un semplice esempio che mostra queste funzioni:
File MATLAB
Le funzioniscipy.io.loadmat
escipy.io.savemat
consentono di leggere e scrivere file MATLAB. Puoi leggere su di loronella documentazione.
Distanza tra i punti
SciPy definisce alcune funzioni utili per calcolare le distanze tra insiemi di punti.,
La funzionescipy.spatial.distance.pdist
calcola la distanza tra tutte le coppie di punti in un determinato set:
È possibile leggere tutti i dettagli su questa funzione nella documentazione.
Una funzione simile (scipy.spatial.distance.cdist
) calcola la distanza tra tutte le pairsacross due serie di punti; puoi leggerlo nella documentazione.
Matplotlib
Matplotlib è un tracciato library.In questa sezione fornisce una breve introduzione al modulomatplotlib.pyplot
, che fornisce un sistema di plotting simile a quello di MATLAB.,
Stampa
La funzione più importante in matplotlib èplot
,che consente di tracciare dati 2D. Ecco un semplice esempio:
Esecuzione di questo codice produce la seguente trama:
Con un po ‘ di lavoro extra si può facilmente trama più linesat una volta, e aggiungere un titolo, la legenda e le etichette dell’asse:
Si può leggere di più su plot
functionin la documentazione.,
Sottotrame
È possibile tracciare cose diverse nella stessa figura utilizzando la funzionesubplot
.Ecco un esempio:
Puoi leggere molto di più sulla funzione subplot
nella documentazione.
Immagini
È possibile utilizzare la funzioneimshow
per mostrare le immagini. Ecco un esempio: