Sei sulla pagina 1di 62

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
Python espressioni e tipi
• 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

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):


14
– "ciao"[2] = "X" → Errore!
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
Costrutto FOR (1)
• La sintassi è la seguente:

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
Il ciclo WHILE
• La sintassi è la seguente:

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
Il ciclo REPEAT UNTIL
• La sintassi è la seguente:

while True:
<istruzioni>
if cond:
break

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
33
array([47, 37, 100, 33, 26, 23, 38, 10, 95, 65])
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
34
(3, 4)
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],
36
[0, 0, 3]])
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:
38
– a.itemsize
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 42
return y
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
44
sostituire la funzione è il valore di ritorno.
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 45
3
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 51
return new
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, 54
percent: %10.2f" % (i, time1, time2, time1/time2))
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; 56
print "Il discriminante dell'equazione e: ", delta
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
Esercizio DFT (1)
import numpy as np
import time

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

Potrebbero piacerti anche