Il linguaggio Python. Salvatore Cuomo

Похожие документы
Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Elementi di Base. Introduzione a Python.

Tutorato di Fondamenti di Informatica TUTOR: DAVIDE GHIANI, GIULIA ORRU

Programmazione in Python. Moreno Marzolla

Laboratorio di Informatica

Fondamenti di Informatica

Laboratorio di Python

laboratorio di python

Informatica (A-K) 5. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Programmi Python: esempi (in Python 3) Prof.ssa Valeria Vittorini Prof. Roberto Canonico Corso di Programmazione I a.a

Scilab. Introduzione a Scilab - Vettori. Corso di Informatica CdL: Chimica. Claudia d'amato.

Tutorato di Fondamenti di Informatica TUTOR: DAVIDE GHIANI, GIULIA ORRU

Logica booleana, Costrutto IF

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

Laboratorio di Python

Laboratorio di Python

Introduzione a Python e Gurobi

Un piccolo esempio: script

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Il linguaggio Python

Programmazione 2. Introduzione al corso

Laboratorio di Python

Input/Output. Console e File.

Laboratorio di Python

Avviate l interprete Python selezionandolo dal menu dei programmi. Una volta avviato, l interprete presenta un cursore in cui inserire comandi

Introduzione a Matlab

Indice. Prefazione. 3 Oggetti e Java 53

Matlab: introduzione

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Laboratorio di Python

Laboratorio di Python (con Linux)

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Esercizi in Laboratorio

Evoluzione del FORTRAN 14/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 15 IL LINGUAGGIO FORTRAN

Programmazione web lato client con JavaScript. Marco Camurri 1

Programmare in Python

Транскрипт:

Il linguaggio Python Salvatore Cuomo

StackOverflow (1) Un interessante articolo qui https://stackoverflow.blog/2017/09/06/incredible-growth-python/ 2

StackOverflow (2) Trends https://stackoverflow.blog/2017/09/06/incredible-growth-python/ 3

Python alcune fonti Libri: Thinking Python: Allen Downey (O Reilly 2012) Programmazione in Python: K. Lambert (Apogeo 2013) Programmare con Python. Guida completa: Marco Buttu, 2014) Python Cookbook: Martelli, Ascher (O Reilly 02) AVANZATO Introduction to Machine Learning with Python: A Guide for Data Scientists, by Sarah Guido and Andreas C. Muller (O Reilly 2016) Materiale on line https://www.python.it/doc/libri/ Beginner's Tutorial ( http://www.freenetpages.co.uk/hp/alan.gauld/italian/) Best tutorial (https://learnpythonthehardway.org/book/) 4

Genesi di Python Piccola genesi del linguaggio Creato da Guido van Rossum nel 1989 al Centrum Wiskunde & Informatica (CWI) Olanda Riscrittura del codice e ampliamento del linguagaggio Python 2.0 nel 2000 Ultima version nel 2008, venne introdotto Python 3.0 Una delle versioni più utilizzate è Python 2.7 che sarà supportato fino al 2020. Un piccolo video di introduzione e molto materiale è presente su http://www.pythontutor.com/ 5

Cosa è Python? E un linguaggio di programmazione interpretato Interpreta in automatico le istruzioni traducendole in linguaggio macchina un linguaggio general-purpose Non crea molti limiti al programmatore in termini di sviluppo di codici e di architettura Ha molto codice e librerie disponibili Invocato a linea di comando è pronto ad interpretare Il prompt è caratterizzato da >>> Gli script Python e le funzioni che si possono importare, generalmente con estensione.py Consente in maniera selettiva di importare parti di librerie e codici. 6

Iniziamo con Python (1) Lanciamo a linea di comando l interprete python (python.exe in windows) e >>> print Forza Napoli! Forza Napoli! con simbolo # si indica unun commento che si estende fino a fine riga #Questo e un commento! print Forza Napoli Ogni istruzione è delimitata dal fine riga Si può usare (come in C) ; per separare istruzioni sulla stessa riga ma non è consigliato per questo linguaggio. 7

Iniziamo con Python (2) Per far continuare un istruzione anche sulla linea successiva è necessario inserire un \ a fine riga Python ragiona a "oggetti" entità fondamentali che i programmi manipolano. Ogni oggetto ha un tipo, che identifica il tipo di operazioni consentite su tale tipo. Gli oggetti scalari sono quegli oggetti che sono indivisibili, e che quindi non hanno struttura interna, ovvero so i tipi base: Il tipo int, ovvero il tipo dei numeri interi, ad esempio 4, -35, o 54900. Il tipo float, ovvero il tipo dei numeri reali, ad esempio 4.0, o in notazione esponenziale 1.3E2. Il tipo bool, ovvero il tipo degli oggetti booleani, ovvero True e False il tipo None, ovvero un tipo con un solo oggetto. 8

Python espressioni Print per la stampa a video Input per l inserimento da tastiera >>> (3.2)+3 5.2 >>> (6.2 / / 2) == ( 6 /2 ) True >>> (7 / /2) == (7.0 /2.0) False >>> (5==3) or (3!=(5+3)) True >>> ((7%2)+2**3)==9.0 True >>> 4 <7.0 False 9

Esempi >>> type (4*7.0) <type float > >>> type (2*8) <type int > >>> 7.3%2 1.2999999999999998 >>> 7%2 1 >>> 3.0 and 2.4 2.4 >>> not 3.9 False Python espressioni e tipi 10

Semplice Programma Esercizio cortesemente fornito da P. De Michele Print-per la stampa a video Input- per l iserimento da tastiera 11

I comandi print e input Print- A tale comando possono essere passati più argomenti separati da un virgola >>> print 1, 2, "XXX 1 2 XXX Input- accetta un singolo argomento opzionale: una stringa che viene mostrata a video prima di leggere il valore digitato. >>> nome = input('inserisci il tuo nome: ') Inserisci il tuo nome: Ezio >>> nome 'Ezio' 12

Uso delle stringhe Le stringhe sono racchiuse fra apici singoli o doppi >>> 'Python' 'Python' >>> print Bella\nNapoli" Bella' Napoli Possono essere usati operatori come per i numeri >>> bella" + Napoli" # concatenazione bella Napoli' >>> "ABC" * 3 # ripetizione 'ABCABCABC' 13

Manipolazione di sottostringhe c i a o 0 1 2 3-4 -3-2 -1 "ciao"[1] # carattere 1 i "ciao"[1:3] # dall 1 al 3 escluso ia "ciao"[2:] # dal 2 alla fine ao "ciao"[:3] # fino al 3 escluso cia "ciao"[-1] # l ultimo carattere o "ciao"[:-2] # fino al penultimo ci "ciao"[-1:1] # non esiste Le stringhe sono immutabili (come i numeri): "ciao"[2] = "X" Errore! 14

Costrutto IF-ELSE (1) 15

Costrutto IF-ELSE (2) La sintassi è la seguente: if <espressione>: <sequenza_comandi> else: <sequenza_comandi> L indentazione deve essere rispettata altrimenti l interprete segnala errore. 16

Costrutto IF-ELSE (3) 17

Costrutto IF-ELSE maggiori alternative Esempi print "Programma per il confronto tra due numeri\n" n1 = input("inserisci n1: ") n2 = input('inserisci n2: ') if (n1 > n2): print 'n1 > n2' elif (n1 < n2): print 'n1 < n2' else: print 'n1 = n2' 18

Costrutti Iterativi 19

La sintassi è la seguente: Costrutto FOR (1) for <variabile> in <sequenza_valori>: <sequenza_comandi> L indentazione deve essere rispettata altrimenti l interprete segnala errore. da1a10 = range(1,11) for conta in da1a10: print conta oppure for conta in range(1,11): print conta 20

range Esempio >>> range(1,10) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(-32, -20) [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21] >>> range(5,21) [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] >>> range(21,5) [] 21

Uso del FOR con Range Esempio 1 demolist = ['life',42, 'the universe', 6,'and',7,'everything'] for item in demolist: print "The Current item is:", print item Esempio 2 list = [2,4,6,8] sum = 0 for num in list: sum = sum + num print "The sum is: ",sum 22

La sintassi è la seguente: Il ciclo WHILE while <espressione>: <sequenza_comandi> L indentazione deve essere rispettata altrimenti l interprete segnala errore. a = 0 while a < 10: a = a + 1 print a 23

Fibonacci.py # Sequenza di Fibinacci. a = 0 b = 1 count = 0 max_count = 20 while count < max_count: count = count + 1 # Memorizzazione dei precedenti old_a = a old_b = b a = old_b b = old_a + old_b # La virgola alla fine di un istruzione print # prosegue la stampa sulla stessa linea. print old_a, print 24

La sintassi è la seguente: while True: <istruzioni> if cond: break Il ciclo REPEAT UNTIL L uso di questo contrutto è sconsigliato! (Programmazione non strutturata) 25

Esercizio di Riepilogo x= int( raw_input ( Inserisi un intero : )) ris = 0 while ris **2 < abs(x): ris = ris + 1 if ris **2!= abs(x): print x, non e un quadrato else : if x < 0: ris = -ris print Il quadrato di, x, e, ris 26

Esercizio di Riepilogo leggere 10 numeri e per ogni numero inserito stamparne il doppio; se l utente inserisce il numero 0 il programma termina prima Esercizio cortesemente fornito da P. De Michele 27

Vettori e Matrici in Python (1) Vettori e Matrici in Python sono casi particolari di lista. Vediamo con è possibile lavorare con esse. >>>a=["pippo", "Pluto", "Paperino"] >>> a[1] 'Pluto >>> z=["ciao", 2.0, 5, [10, 20]] >>> z[3] [10, 20] >>> a=range(10) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 28

Vettori e Matrici in Python (2) L indicizzazione avviene a partire da 0 ovvero il primo elemento di un vettore a è sempre a[0] (come nel linguaggio C) >>> a=range(0,10,2) >>> a [0, 2, 4, 6, 8] >>> a[0] 0 >>> Squadre = ["Napoli", "Inter", "Milan", "Roma"] >>> Numeri=[ 1,2 ] >>> print Squadre, Numeri ['Napoli', 'Inter', 'Milan', 'Roma'] [1, 2] >>> 'Juve' in Squadre False >>> 'Napoli' in Squadre True 29

Vettori e Matrici in Python (3) Le matrici sono definite come liste annidate >>> Mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> Mat [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> Mat[0] #estraggo la prima riga [1, 2, 3] >>> Mat[0][0] #estraggo il primo elemento 1 #Stampa di una matrice 3x3 for i in range(0,3): for j in range(0,3): print m[i][j] 30

Operazioni di Algebra lineare (1) Somma di vettori >>> x=[1,2,3] >>> y=[4,5,6] >>> x+y [1, 2, 3, 4, 5, 6] >>> [0] * 4 [0, 0, 0, 0] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3] Attenzione essendo matrici e vettori delle Liste la somma e il prodotto hanno il senso della concatenazione e non algebrico!! 31

Operazioni di Algebra lineare (2) Per lavorare con Matrici e vettori bisogna imprortate i moduli numerici dalla libreria NumPy attraverso il comando from numpy import * Siamo pronti adesso per lavorare con vettori >>>x=array([1,2,3]) >>>y=array([4,5,6]) >>>x+y array([5, 7, 9]) >>>2*x array([2, 4, 6]) >>>x*y #prodotto membro a membro array([ 4, 10, 18]) 32

Operazioni di Algebra lineare (3) Siamo pronti adesso per lavorare con vettori >>>x=array([1,2,3]) >>>y=array([4,5,6]) >>print dot(x,y) 32 >>>x.size 3 >>>y/x #divisino membro a membro array([4, 2, 2]) >>>#generare un vettore casuale >>>import random >>> x=array([random.randint(1,100) for i in range(10)]) >>> x array([47, 37, 100, 33, 26, 23, 38, 10, 95, 65]) 33

Operazioni di Algebra lineare (4) Siamo pronti adesso per lavorare con matrici >>> a = ones( (3, 4) ) >>> a array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]]) >>> b = 2*ones( (3, 4) ) >>> b array([[ 2., 2., 2., 2.], [ 2., 2., 2., 2.], [ 2., 2., 2., 2.]]) >>> a.size 12 >>> a.shape (3, 4) 34

Operazioni di Algebra lineare (5) Siamo pronti adesso per lavorare con matrici >>> c=dot(a,b) #prodotto tra matrici Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: matrices are not aligned >>> a=ones((3,3) >>> b=2*ones((3,3)) >>> c=dot(a,b) #prodotto tra due matrici riga per colonna >>> c array([[ 6., 6., 6.], [ 6., 6., 6.], [ 6., 6., 6.]]) 35

Operazioni di Algebra lineare (5) Siamo pronti adesso per lavorare con matrici >>> x=ones((3,1)) >>> x array([[ 1.], [ 1.], [ 1.]]) >>> c=dot(a,x) #prodotto matrice vettore >>> c array([[ 3.], [ 3.], [ 3.]]) >>> y=[1,2,3] >>> z=diag(y) array([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) 36

Utility per l Algebra lineare in Python (1) Costruzione di un vettore: a = array([0, 1, 2, 3]) Costruzione di una matrice 3x3: a = array([0, 1, 2], [3, 4, 5], [6, 7, 8]) Vettore dei numeri da 0 a 10: a = arange(10) Vettore dei numeri da 10 a 100 a passi di 0.5: a = arange(10, 100, 0.5) Vettore di 100 numeri da 0 a pi greco: a = linspace(0, pi, 100) Matrice 3x4 di valori 0: a = zeros( (3, 4) ) Matrice 3x4 di valori 1: a = ones( (3, 4) ) 37

Utility per l Algebra lineare in Python (2) Matrice di valori 0 con valori specifici sulla diagonale: a = diag([1, 2, 3, 4, 5]) Matrice di valori 0 con valori specifici sulla terza diagonale: a = diag([1, 2, 3, 4, 5], 3) Rango della matrice: a.ndim Dimensioni della matrice: a.shape (restituisce a.ndim valori) Numero di elementi nella matrice: a.size (equivale al prodotto di tutti i risultati di a.shape) Tipo degli elementi nella matrice: a.dtype Dimensione in byte di un elemento della matrice: a.itemsize 38

Utility per l Algebra lineare in Python (3) Somma membro a membro: x = a + b, a += b Differenza membro a membro: x = a - b, a -= b Prodotto membro a membro: x = a * b, a *= b Prodotto matriciale: x = dot(a, b) Divisione membro a membro: x = a / b, a /= b 39

Esempi (1) >>> import numpy as np >>> a = np.arange(6).reshape((3, 2)) >>> a array([[0, 1], [2, 3], [4, 5]]) >>> x = np.arange(4).reshape((2,2)) >>> x array([[0, 1], [2, 3]]) >>> np.transpose(x) array([[0, 2], [1, 3]]) 40

Esempi (2) >>> a array([[ 0.18626021, 0.34556073, 0.39676747], [ 0.53881673, 0.41919451, 0.6852195 ]]) >>> a.sum() 2.5718191614547998 >>> a.min() 0.1862602113776709 >>> a.max() 0.6852195003967595 >>> B = np.arange(3) >>> B array([0, 1, 2]) >>> np.exp(b) array([ 1., 2.71828183, 7.3890561 ]) >>> np.sqrt(b) array([ 0., 1., 1.41421356]) 41

Funzioni in Python (1) Molte funzioni (che abbiamo già utilizzato) appartengono a librerie e possono essere richiamate attraverso l istanza from <nome_libreria> import <funzioni> La sintassi per dichiarare un funzione è def <nome_funzione>(<lista_parametri>): <sequenza_istruzioni> return Esempio def minimo(x,y): if x<y: return x else return y 42

Funzioni in Python (2) Salvare la funzioni che si vogliono richiamare in un file.py minimo.py #funzione minimo def minimo(x,y): if x<y: return x else: return y Importare nell interprete la funzione e richimarla a linea di comando >>>from minimo import * >>>minimo(2,3) 2 43

Parametri attuali e formali Consideriamo la inzione minimo(x,y) i parametri x e y sono detti formali Quando la funzione viene richiamata >>>minimo(2,3) 2 e 3 sono detti parametri attuali Tecnicamente 2 e 3 vengono copiati in x e y e la funzione può lavorare con i suddetti valori. L istruzione return, viene utilizzata per restituire uno o più valori al chiamante Con return il controllo ritorna all istruzione che aveva effettuato la chiamata, e il valore con cui sostituire la funzione è il valore di ritorno. 44

Passaggio per valore (1) In python le variabili vengono passare per valore e non per indirizzo (funzione scambio) def scambio1(x,y): #funzione scambio t=x x=y y=t print x,y return >>> from scambio1 import * >>> x=2 >>> y=3 >>> print x,y 2 3 >>> scambio1(x,y) 3 2 >>> x 2 >>>y 3 45

Passaggio per valore (2) In python per effettuare uno scambio dobbiamo def scambio(x,y): #funzione scambio x1=y y1=x return x1,y1 >>> from scambio import * >>> x=2 >>> y=3 >>> print x,y 2 3 >>> x,y = scambio1(x,y) 3 2 46

Cosa avvine in memoria? Ecco cosa avviene realmente in memoria def ref_demo(x): print "x=",x," id=",id(x) x=42 print "x=",x," id=",id(x) >> x = 9 >>> id(x) 41902552 >>> ref_demo(x) x= 9 id= 41902552 x= 42 id= 41903752 >>> id(x) 41902552 47

Variabili Globali e Locali In python le variabili locali definite in funzioni non vengono viste globalmente total = 0; # Questa è una varibile globale def sum( x, y ): # funzione che fa la somma total = x + y; # total è locale print dentro la funzione : ", total return total; # richiamiamo sum sum( 10, 20 ); print Stampa di total fuori la funzione :, total In esecuzione: dentro la funzione : 30 Stampa di total fuori la funzione : 0 48

Variabili Globali e Locali In python le variabili locali definite in funzioni non vengono viste globalmente total = 0; # Questa è una varibile globale def sum( x, y ): # funzione che fa la somma total = x + y; # total è locale print dentro la funzione : ", total return total; # richiamiamo sum sum( 10, 20 ); print Stampa di total fuori la funzione :, total In esecuzione: dentro la funzione : 30 Stampa di total fuori la funzione : 0 49

Uso della ricorsione In python è possibile fare uso della ricorsine. n=input( dammi il numero degli elementi della succ ) def fib(n): #successione di fibinacci if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) # fibonacci print fib(n) In esecuzione python fibonacci.py Dammi n: 5 8 50

Ricorsione e complessità computazionale(1) Preparioamo modi diversi di ricorsione scrivendo un file fibonacci.py def fib(n): #funzione 1 if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) def fibi(n): #funzione 2 old, new = 0, 1 if n == 0: return 0 for i in range(n-1): old, new = new, old + new return new 51

Ricorsione e complessità computazionale(2) Prepariamo modi diversi di ricorsione scrivendo un file fibonacci.py memo = {0:0, 1:1} def fibm(n): #funzione 3 if not n in memo: memo[n] = fibm(n-1) + fibm(n-2) return memo[n] 52

Ricorsione e complessità computazionale(3) Prendiamo i tempi scrivendo un file fibonacci_runit.py from timeit import Timer t1 = Timer("fib(10)","from fibonacci import fib") for i in range(1,41): s = "fib(" + str(i) + ")" t1 = Timer(s,"from fibonacci import fib") time1 = t1.timeit(3) s = "fibi(" + str(i) + ")" t2 = Timer(s,"from fibonacci import fibi") time2 = t2.timeit(3) print("n=%2d, fib: %8.6f, fibi: %7.6f, percent: %10.2f" % (i, time1, time2, time1/time2)) 53

Ricorsione e complessità computazionale(4) Vediamo cosa succede con l algoritmo 3 fibonacci_runit1.py from timeit import Timer from fibonacci import fib t1 = Timer("fib(10)","from fibonacci import fib") for i in range(1,41): s = "fibm(" + str(i) + ")" t1 = Timer(s,"from fibonacci import fibm") time1 = t1.timeit(3) s = "fibi(" + str(i) + ")" t2 = Timer(s,"from fibonacci import fibi") time2 = t2.timeit(3) print("n=%2d, fib: %8.6f, fibi: %7.6f, percent: %10.2f" % (i, time1, time2, time1/time2)) 54

Ricorsione e complessità computazionale(5) Approfondimenti sulla ricorsione https://www.python-course.eu/python3_recursive_functions.php 55

Esercizio (1) Soluzione di un equazione di secondo grado e grafico. import math import numpy as np import matplotlib.pyplot as plt print "Programma per il calcolo delle equazioni di secondo grado\n" #LETTURA DEI COEFFICIENTI a, b E c a = input("inserisci il coefficiente a: ") a = float(a) b = input("inserisci il coefficiente b: ") b = float(b) c = input("inserisci il coefficiente c: ") c = float(c) #CALCOLO DEL DISCRIMINANTE delta delta=math.pow(b,2)-4*a*c; print "Il discriminante dell'equazione e: ", delta 56

Esercizio (2) #SE IL DISCRIMINANTE delta E' MINORE DI 0 if delta < 0: print "L'equazione non ha soluzioni!"; #ALTRIMENTI (SE IL DISCRIMINANTE delta E' MAGGIORE O UGUALE A 0...) else: if a == 0: x1 = -c/b print "L'equazione e' di primo grado" #STAMPA IL VALORE DELLA SOLUZIONE x1 print "x = ", x1 else: #CALCOLA LA PRIMA SOLUZIONE x1 x1 = (-b+math.sqrt(delta))/(2*a) 57

Esercizio (3) if delta == 0: print "L'equazione ha due soluzioni x1 ed x2 coincidenti (x1=x2)" #STAMPA IL VALORE DELLA PRIMA SOLUZIONE x1 print "x1 = x2 = ", x1 #ALTRIMENTI (SE IL DISCRIMINANTE delta E' MAGGIORE DI 0...) else: #CALCOLA ANCHE LA SECONDA SOLUZIONE x1 x2 = (-b-math.sqrt(delta))/(2*a) print "L'equazione ha due diverse soluzioni x1 ed x2" #STAMPA IL VALORE DELLA PRIMA 58

Esercizio (4) #STAMPA IL VALORE DELLA PRIMA SOLUZIONE x1 print "x1 = ", x1 #STAMPA IL VALORE DELLA SECONDA SOLUZIONE x2 print "x2 = ", x2 59

Esercizio (5) print "Ecco i valori assunti dalla parabola y (l'equazione di secondo grado) per x che varia tra [-10, 10]"; N = 10 X=np.zeros(N*2+1) Y=np.zeros(N*2+1) for i in range(-n, N+1): X[i+N]=i Y[i+N]=a*math.pow(X[i+N],2)+b*X[i+N]+c print "x[", i, "] = ", X[i+N], "y = [", i, "] = ", Y[i+N] plt.plot(x,y) plt.ylabel('asse y') plt.xlabel('asse x') plt.show() 60

import numpy as np import time Esercizio DFT (1) n=int(input("dammi la dimensione del vettore: ")) x = np.random.random(n) def DFT_slow(x): """Compute the discrete Fourier Transform of the 1D array x""" x = np.asarray(x, dtype=float) N = x.shape[0] n = np.arange(n) k = n.reshape((n, 1)) W = np.exp(-2j * np.pi * k * n / N) #print " Matrice di Fourier \n" #print W, "\n" 61 return np.dot(w, x)

Esercizio DFT(2) print x, print " \n Trasformata di Fourier di x con la DFT \n" start = time.time() x1=dft_slow(x) end = time.time() print (end - start), "\n" print x1, print " \n Trasformata di Fourier di x con la FFT \n" start1 = time.time() x2=np.fft.fft(x) end1 = time.time() print (end1 - start1), "\n" print x2, 62