vuoi
o PayPal
tutte le volte che vuoi
MATRICI
Si usano le liste per rappresentare matrici, in modo da accedere al valore (i,j) con la sintassi A[i][j].
img = [] # una lista vuota
for i in range(480): # itero su tutte le righe della mia matrice
img.append([0]*640) # la lista è lunga 480, se prendo un elemento di questa lista è un'altra lista lunga 640
Per accedere al valore del pixel di coordinate 101,101 si utilizza la sintassi image[100][100]
.
img = [0]*480*640 # Immagine nera con ogni pixel a 0, per accedere al singolo pixel non si usa più come utilizzare indici di righe e colonne
Per accedere al valore del pixel di coordinate r, c si utilizza la formula image[640*i + j]
.
RAPPRESENTAZIONE LINEARE:
Si prende l'indice di righe che parte da 0 che corrisponde al numero di righe che si vogliono saltare, per saltare una riga basta vedere quanti elementi ci sono in una riga ovvero quante colonne ha la matrice. La formula per calcolare la posizione di un elemento è i*(num. colonne)+j
.
l1 = [[3,45,2],[2,10,-3]] # len(l)=2
formattazione del testo fornito utilizzando tag html:
len(l[0])=3 => l[1][1]=10
Pagina 6fifififi fifi fi fi fi
l2 = [3,45,2,2,10,-3] => indice_lineare = riga*3+colonna- FORMULA ROTAZIONE 90° = Tetris => idx = 12 + i - j*columns => utilizzo la stessa matrice ma laindicizzo in modo diverso => ruotano anche gli indici => scorrendo tra le righe aumento di uno versoil basso e luna le righe decremento di 3
Tensori= numero maggiore di due di dimensioni =>M = [0]•Dim1•Dim2•Dim3 => (1 e 2=righe e colonne)
idx = c*(colonne*righe)+i*colonne+j
Per accedere all’elemento: => c=nuovoc*(colonne*righe)indice=canale => per capire quanti canali sono passati = .
A = [ 1.1, 0, 0] B = [ 2.2,.0, -2.1]=> prod=0 => for i inProdotto Salare:range(0, len(A)): prod+=A[I]*B[I]
FUNZIONI
Riuso del codice => strutturare il programma in maniera ordinata eleggibile
def <nome_funzione> (<parametri formali>): => a capo =istruzioni
Parametri formali = lista argomenti => al momento della
chiamatadiventano parametri attuali=> quando si chiama la funzione sideve mettere al posto dei valori generici (a,b, N) gli elementi su cui sideve applicare la funzione che possono essere numeri ecc => il codice andrà avanti sui parametrispeci cati- Return non è obbligatorio=> la funzione può essere utilizzata per i suoi side-effects=> esempio print- Scope di una variabile (o visibilità) = dov’è possibile farvi riferimento => variabili de nite fuori dallefunzioni hanno visibilità globale- Quando una funzione viene chiamata si crea un data-frame = porzione di memoria isolata in cui ad ognivariabile dello scope della funzione corrispondono corrispondono i relativi valori- IMPORTANTE: la variabile de nita dentro la funzione è diversa da quella fuori=> una volta de niti iparametri attuali quelli formali spariscono- Se de nisco uno dei due parametri nella de nizione della funzione al momento della chiamata se alcoef
ciente con già il valore non viene assegnato niente esso assumerà il valore di default
MODULI
- import.<nome modulo>
- Funzioni raggruppate => si importano con- >>> help('modules') =>Posso vedere tutti i moduli che posso importare
- >>>import matplotlib.pyplot as plt => Si legge: importa pyplot da matplotlib e chiamaloplt => L'uso di as consente di importare sotto-moduli e comprimerne il nome
- Modulo è un le .py che contiene diversi def
- Sottomoduli = moduli in una stessa cartella
MUTABILITÀ
- Python => tutto è un oggetto => ogni oggetto ha un tipo
- Variabili => esistono dal momento in cui vengono inizializzate => si possono scollegare da un certo valore e collegarle a un altro
- Tipi di oggetti:
- Scalari semplici = int, float, bool => alla variabile corrisponde un singolo valore senza struttura interna
- nome.capitalize() #lettera
- Non scalari con struttura interna => Supportano METODI
> Es.• maiuscola Pagina 7fi fifi fi fl fi fi fi fi
METODI- METODO = funzione che posso invocare solo partendo da un oggetto esistente> solo per oggetti per cuisono de niti dei metodi- [<var>|<constant>].<func_name> ([<formal_parameters>])
SINTASSI =- Possono avere o meno parametri formali => ovvero variabili che vengono poi sostituite in fase diinvocazione da oggetti ovvero parametri attuali.- Non modi cano oggetti ma ne creano uno nuovo (le stringhe sono immutabili perciò quando si mettela lettera maiuiscola con capitalize la stringa rimane la stessa ma ne viene creata una nuova con lamaiuscola, non vale per le liste che sono invece mutabili)
RICORSIONE- De nizione: algoritmo ricorsivo = algoritmo espresso in termini di sé stesso => funzione può chiamarealtre funzioni oppure chiamare se stessa- Concetto: dividere un problema complesso in problemi semplici- Esempio: sommare i primi N interi=> Se N=0: somma(N) = 0 (CASO
<p>BASE) => Altrimenti: somma(N) = somma(N-1) + N (CASO GENERALE) => Senza Caso Base ricorsione infinita</p>
<p>È necessario pensare una ricorsione come una dimostrazione per induzione:</p>
<ul>
<li>Passo 1) Dimostro una tesi in un caso molto semplice</li>
<li>Passo 2) Ammesso che la tesi valga per il caso N, dimostro che vale per il caso N+1</li>
<li>Verificati passo 1 e passo 2 => dimostro che la mia affermazione vale per qualunque N</li>
</ul>
<p>In termini più informatici:</p>
<ul>
<li>Passo 1) Garantire una soluzione per un caso elementare (insieme vuoto, N=0, stringa nulla, stringa di un solo carattere, ecc.)</li>
<li>Passo 2) Assicurarsi che la funzione chiami sé stessa su una versione dei dati ridotta => Il passo 2 garantisce che la funzione ad un certo punto sarà eseguita sul caso base, per cui ho una risposta.</li>
</ul>
<p>Esecuzione funzione ricorsiva = viene creato uno spazio di memoria che contiene tutte le variabili nel suo scope (visibilità di certe variabili): variabili argomento, variabili dichiarate al</p>
suo interno- Le variabili nello scope del chiamante non sono accessibili alla funzione chiamata e viceversa=> ognichiamata avrà il suo scope con le sue variabili e le altre non saranno accessibili- Sintassi di python = NO limite volte in cui funzione nel suo corpo può richiamare sé stessa- .Numeri Pseudo-casuali- pseudo= su brevi sequenze appaiono casuali- Non si possono creare numeri casuali da un programma numeri casuali- import random => v_rand = random.random()MODULO => = si creano oatpseudocasuali (tra 0 e 1 in questo caso) dopo aver importato random- Random= dipende da numero casuale precedente => SEED = numero che fornito al generato casualerandom.seed(valore)altera la sequenza = cambio seed cambia sequenza => => DEBUG=necessario ssare il SEED- r = (max-min)*random.random() + minGenerare numeri casuali tra [min, max]=>- METODO MONTECARLO: Es .Area cerchio senza sapere la formula:- Scelgo una regione che contiene il cerchio di area nota-
Genero punti casuali compresi nella regione di cui conosco l'area
Conto quanti sono dentro e quanti sono fuori
INTEGRAZIONE DI UNA FUNZIONE:
FUNZIONE GAUSSIANA = distribuzione continua = per un fenomeno casuale dato un intervallo [xmin, xmax] mi dice quanto la probabilità che un valore x: xmin < x < xmax
Definiamo la funzione da integrare:
def normal(variabili funzione):
# se mu è compreso tra i valori fissati xmin e xmax => nel punto medio mu si prende la y => y = N(mu) = corrisponde a altezza rettangolo
# Altrimenti calcolo il massimo (da definire)
Pagina 8fifi fi fi fi fi fiè fi à fi flTUPLE
Liste immutabili => oggetti arbitrari => mantengono ordine
Accesso per indice => t[0] = ...
Slicing = t[0:2] # elementi di t da 0 a 2
>>> temp = x
>>> x = y
>>> y = temp
Scambio di variabile con una sola riga di codice:
(x, y) = (y, x) # con le tuple si fa così e si fa
prima- def funzione => 2 azioni dentro la
Restituire più valori con una funzione:funzione=> return (risultato 1, risultato 2)
.- tupla(lista1,lista2) =>AGGIUNGERE ELEMENTI A ELEMENTI DELLA TUPLA =>tupla[0].append.(elemento da aggiungere a lista 1)
.- 10, ; (10,) => 10 = int , (10)=int
TUPLA = de nita dalla virgola => Es: .# parentesi simettono per leggibilità
Dizionari- Liste sono accessibili tramite un indice che identi ca univocamente un elemento
Limitazioni sulle chiavi:- int, oat, bool, str [tutti tipi immutabili] => (bool non utile= crea tabella due posti)
Non si possono usare oggetti mutabili senno si perde la corrispondenza
Non si possono inserire oggetti con la medesima chiave
OPERAZIONI:- >>> d [key] = valueInserimento => => aggiunge oggetto al dizionario con quella chiave
>>> d.pop(key)Cancellazione => => elimina oggetto corrispondente alla chiave
>>> d[key]Visita => si accede ai dizionari usando
le [] => .- Iterazioni => 3 metodi per iterazioni:- >>> for k in d: #equivalente a usare d.keys() => print(k) #stampole chiavi => print(d[k]) #posso accedere ai valori così- >>> for v in d.values(): => print(v) #stampo i valori- >>> for k, v in d.items(): #items restituisce delle coppie (k, v)=>print(k, v) #stampo chiavi e valori- Ricerca => 2 metodi:- >>> if k in d: =>Interrogare dizionario sulla presenza di una chiave =print(‘Trovato!’) => else: => print(‘No!’)- >>> if k notSe una chiave non è presente allora crea un elemento con chiave k e valore 0=in d: => d[k]=0 => d[k] += 1 .Insiemi- set() => built-in insieme => usati per togliere duplicati da strutture dati ridondanti => contengono set solooggetti immutabili- OPERAZIONI: Pagina 9fl fi fi- add >>> s =Inserimento => metodo = aggiungere un oggetto al set impedendo ripetizioni=>set()
#insieme vuoto=> >>> s.add(10) => >>> s- remove >>>Cancellazione => metodo = rimuovere un oggetto dal set =>s.remove(elemento)- pop >>>Cancellazione arbitraria=> metodo = rimuovere un oggetto arbitrario dal set=>s.pop()- Visita => non si può visitare con indice perché non mantengono ordine => si può usare for ma ordine>>> s = set([1,2,1]) #trasformo la lista [1,2,1] nel setnon è garantito=>{1,2} => >>> for el in s: => print(el) => 1 => 2 .- in / notRicerca => operatore- >>> s = set([1,2,1]) #trasformo la lista