Anteprima
Vedrai una selezione di 4 pagine su 15
Riassunto del Corso di Informatica Pag. 1 Riassunto del Corso di Informatica Pag. 2
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Riassunto del Corso di Informatica Pag. 6
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Riassunto del Corso di Informatica Pag. 11
1 su 15
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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

Dettagli
Publisher
A.A. 2020-2021
15 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher meteosieve di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Becattini Federico.