On 14/05/2011 16:14, Daniele Varrazzo wrote:
On Sat, 14 May 2011 12:37:15 +0200, "M@T"<perini.mat...@gmail.com>  wrote:

(Scusa lo sporchettamento di questa email...)

Ho messo dei commenti per cercare di seguire le dimensioni della matrice.
Se vuoi continuare questo post, per favore commenta anche le altre righe,
perché non so cosa faccia la funzione 'wavelet()'.

matrixdata=np.array(matrix,dtype='int')
fase=np.zeros(matrixdata.shape)
matrixdata NxM int
for riga in range(matrixdata.shape[0]):
      A=matrixdata[riga]
A (array di M componenti)
      cw=wavelet(A)
      cwt=cw.getdata()     # NxM complex, giusto?
se matrixdata è NxM, in generale cwt è RxM con R dipendente da parametri della trasformata.
      val=cwt.__abs__()    # NxM real - puoi usare abs(cwt) credo
Ci sono differenze tra i due modi di ottenere lo stesso risultato????

In questa parte, che sembra la ciccia da ottimizzare:

SI esatto!
      x=np.arange(val.shape[1])    # [0,1,..M-1]
      y=val.argmax(0) # vettore di M indici
      for i in x:

fase[riga,i]=np.arctan2(cwt[y[i],x[i]].imag,cwt[y[i],x[i]].real)

sono abbastanza sicuro (non 100%, perchè non ho capito bene cosa finisca
in y) che tu possa scrivere questo come tipo:

     fase[riga] = np.arctan2(np.imag(cwt[?]), np.real(cwt[?]))

Ok... il mio problema (era) cosa mettere al posto del punto di domanda (avevo optato per il ciclo)
in modo da far srotolare questo loop al C. cwt[x] dovrebbe essere qualcosa
che ha la stessa forma di fase[riga].

Se capisco bene, y[i] è la posizione del valore di modulo massimo nella
colonna i. x[i] è solo i invece. Tu vuoi prendere il numero complesso col
modulo massimo per ogni colonna di cwt e salvarne la fase. Su questa pila
di assunzioni e spolverando quello che ricordo, mi sembra tu possa fare:

Hai capito benissimo.... anzi scusate ma le mie doti di oratore sono piuttosto limitate...
     cwtmax = y.choose(cwt)
     fase[riga] = np.arctan2(np.imag(cwtmax), np.real(cwtmax))


CHOOSE! grazie! (quante cose ho da imparare)
dove y.choose
(http://docs.scipy.org/doc/numpy/reference/generated/numpy.choose.html) a
occhio sembra faccia il broadcast di dimensioni che serve a te. Ovvero, in
un esempio fatto coi reali:

a è una matrice casuale di numeri [-0.5..0.5]:

array([[ 0.25130797,  0.21050261, -0.44835267,  0.2643408 ],
        [-0.30653352, -0.15036878,  0.34683264,  0.34859056],
        [ 0.32359279, -0.4676089 , -0.37165642,  0.08612426]])

y = abs(a).argmax(0) = array([2, 2, 0, 1]) (vettore degli indici delle
righe del massimo di ogni colonna)

y.choose(a) = array([ 0.32359279, -0.4676089 , -0.44835267,  0.34859056])

sembra quello che volevo: l'elemento col massimo valore assoluto per ogni
colonna di a.

C'è da vedere se quello che volevo io era la stessa cosa che volevi tu...
:)
Era quello! grazie ancora!
Ciao
Matteo

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a