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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a