[Python] Evitare cicli annidati....
M@T
perini.matteo a gmail.com
Sab 14 Maggio 2011 12:37:15 CEST
Ciao,
ho un problema, dovuto molto probabilmente alla mia inesperienza, che
credo mi allunghi parecchio i tempi di esecuzione del programma.
Ho un ciclo annidato di questo tipo:
matrixdata=np.array(matrix,dtype='int')
fase=np.zeros(matrixdata.shape)
for riga in range(matrixdata.shape[0]):
A=matrixdata[riga]
cw=wavelet(A)
cwt=cw.getdata()
val=cwt.__abs__()
x=np.arange(val.shape[1])
y=val.argmax(0)
for i in x:
fase[riga,i]=np.arctan2(cwt[y[i],x[i]].imag,cwt[y[i],x[i]].real)
print 'ciclo',h,'di',matrixdata.shape[0]
dove per ogni riga di una matrice vado a compiere una trasformata
wavelet unidimensionale dalla quale si ottene (getdata) una matrice
(NxM). Questa, con alcune operazioni, va rieaborata per ottenere una
nuova riga (vettore) che deve prendere, in una nuova matrice (fase), la
stessa posizione che aveva la riga di origine.
Questa procedura va fatta per ogni riga della matrice di pertenza con lo
scopo di ottenere una seconda matrice (trasformata) di identiche dimensioni.
Avrei bisogno di aumentare un pochino le prestazioni, adesso la
rielaborazione di una matrice 1024 x 1024 ci mette un paio di minuti. In
realtà l'operazione wavelet è molto veloce.... è la riassegnazione col
secondo ciclo for che "ruba molto tempo".
Per questo vi vorrei chiedere se conoscete tecniche o metodi per
ovviare ai due cicli (qualsiasi proposta di ottimizzazione del codice è
ben accetta)
Grazie
Matteo P
Maggiori informazioni sulla lista
Python