[Python] Evitare cicli annidati....

2011-05-14 Per discussione M@T

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


Re: [Python] Evitare cicli annidati....

2011-05-14 Per discussione Enrico Franchi

M@T wrote:


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".


numpy offre numerose opzioni per non scrivere cicli ma applicare le 
trasformazioni 'globalmente'. Guardaci dentro.


--
.
..: -enrico-

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


Re: [Python] personalizzare DIA

2011-05-14 Per discussione Riccardo mancuso
proposta molto interessante...


Il giorno 14 maggio 2011 08:32, Matteo Boscolo
ha scritto:

>  be dico anche la mia ...
>
> e mettere tutta sta roba dentro pythonCAD ???
>
> ciao
> Matteo
>
> Il 29/04/2011 10:34, Riccardo mancuso ha scritto:
>
> realizzare e risolvere reti di questo tipo, può essere poi generalizzato
> anche per altre tipologie di problemi della fisica: dalle reti termiche a
> quelle meccaniche, a quelle idrauliche ecc. secondo i cosìddetti "bond
> graph" (che rappresentano una generalizzazione di quanto prima detto)
> Il tutto è molto affascinante dal punto di vista applicativo e lo è ancor
> più se si riesce a implementare con software open source.
>
>
>
> Il giorno 28 aprile 2011 20:02, Giorgio Zoppi  ha
> scritto:
>
>> Grazie...non ci avevo mai pensato...PyDia:
>> http://dia-installer.de/howto/python_win32/
>> ___
>> Python mailing list
>> Python@lists.python.it
>> http://lists.python.it/mailman/listinfo/python
>>
>
>
> ___
> Python mailing 
> listPython@lists.python.ithttp://lists.python.it/mailman/listinfo/python
>
>
>
> Nessun virus nel messaggio.
> Controllato da AVG - www.avg.com
> Versione: 10.0.1209 / Database dei virus: 1500/3603 - Data di rilascio:
> 28/04/2011
>
>
>
> ___
> Python mailing list
> Python@lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Evitare cicli annidati....

2011-05-14 Per discussione Daniele Varrazzo
On Sat, 14 May 2011 12:37:15 +0200, "M@T"  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)
> for riga in range(matrixdata.shape[0]):
>  A=matrixdata[riga]
>  cw=wavelet(A)
>  cwt=cw.getdata() # NxM complex, giusto?
>  val=cwt.__abs__()# NxM real - puoi usare abs(cwt) credo

In questa parte, che sembra la ciccia da ottimizzare:

>  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[?]))

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:

cwtmax = y.choose(cwt)
fase[riga] = np.arctan2(np.imag(cwtmax), np.real(cwtmax))

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


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Evitare cicli annidati....

2011-05-14 Per discussione M@T

On 14/05/2011 16:14, Daniele Varrazzo wrote:

On Sat, 14 May 2011 12:37:15 +0200, "M@T"  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


Re: [Python] Evitare cicli annidati....

2011-05-14 Per discussione Daniele Varrazzo
On Sat, 14 May 2011 17:03:26 +0200, "M@T"  wrote:

>>>   val=cwt.__abs__()# NxM real - puoi usare abs(cwt) credo
> Ci sono differenze tra i due modi di ottenere lo stesso risultato

No, il risultato è lo stesso, ma __abs__() è un dettaglio implementativo.


> Era quello! grazie ancora!

Funziona? Di quanto è più veloce?


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Evitare cicli annidati....

2011-05-14 Per discussione M@T

On 14/05/2011 17:46, Daniele Varrazzo wrote:

On Sat, 14 May 2011 17:03:26 +0200, "M@T"  wrote:


   val=cwt.__abs__()# NxM real - puoi usare abs(cwt) credo

Ci sono differenze tra i due modi di ottenere lo stesso risultato

No, il risultato è lo stesso, ma __abs__() è un dettaglio implementativo.




Ok cambiato.

Era quello! grazie ancora!

Funziona? Di quanto è più veloce?


Appena funziona ti faccio sapere ;)

Arghhh lo sapevo che avevo esultato troppo presto.

la seconda riga mi da questo errore
y=abs(cwt).argmax(0)
cwtmax=np.choose(y,cwt)

Traceback (most recent call last):
  File "WL2.py", line 56, in 
cwtmax=np.choose(y,cwt)
  File "/usr/lib/pymodules/python2.7/numpy/core/fromnumeric.py", line 
296, in choose

return choose(choices, out=out, mode=mode)
ValueError: Need between 2 and (32) array objects (inclusive).

Sto cercando in rete ma nelle doc non trovo niente riguardo ad una 
limitazione di 32 righe della matrice cwt.


Se uso cwt 31xN non ci sono problemi! funziona (mi sembra un po' limitante)
Consigli?
a qualcuno è  capitato?
Ciao
Grazie
Matteo




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


[Python] StaticText esterno a StaticBoxSizer

2011-05-14 Per discussione Nicola Ferrari
Ciao a tutti.


class Client(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent,size=(200, 200))
lbox = wx.StaticBox(self, -1, 'Dati cliente ', size=(100, 100),
pos=(0,10))
lboxsizer = wx.StaticBoxSizer(lbox, wx.VERTICAL)
lboxsizer.Add(wx.StaticText(self, label="Nome: "))



Non riesco a capire come mai la mia "etichetta" non venga messa all'interno
del mio lbox
Dove sbaglio?
Grazie
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Evitare cicli annidati....

2011-05-14 Per discussione Daniele Varrazzo
On Sat, 14 May 2011 18:07:35 +0200, "M@T"  wrote:
> On 14/05/2011 17:46, Daniele Varrazzo wrote:

> Appena funziona ti faccio sapere ;)
> 
> Arghhh lo sapevo che avevo esultato troppo presto.
> 
> la seconda riga mi da questo errore
> y=abs(cwt).argmax(0)
> cwtmax=np.choose(y,cwt)

> Se uso cwt 31xN non ci sono problemi! funziona (mi sembra un po'
limitante)
> Consigli?

Uhm, forse la cosa è ancora più semplice.

Se X e Y sono array di indici di righe e colonne, A[X,Y] restituisce un
array di elementi di A, con la stessa forma di X ed Y. Quindi

cwtmax = cwt(y, np.arange(cwt.shape[1]))

sembra di nuovo quello che cerchi.


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] personalizzare DIA

2011-05-14 Per discussione Matteo Boscolo

Il 14/05/2011 12:57, Riccardo mancuso ha scritto:

oposta molto interessante...

se avete vogli di parlarne ... io ci sono :-)

ciao
e buona domenica ..
Matteo

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


[Python] PythonCAD a europython 2011

2011-05-14 Per discussione Matteo Boscolo

Salve a tutti,
la presente per informarvi che a Giugno ad europython2011 ci sarà anche 
PythonCAD fra i vari talk proposti ... :-)


questo e' il calendario dell'evento
http://ep2011.europython.eu/p3/schedule/ep2011/
e questo e' il talk
http://ep2011.europython.eu/conference/talks/developing-a-cad-application-as-hobby

Naturalmente ci sarò anche io :-)

ciao a tutti
e buon europython2011 :-)))
Matteo

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