[Python] Passare perametri a/tra classi
M@T
perini.matteo a gmail.com
Mar 17 Maggio 2011 13:27:49 CEST
> A chi ha postato la domanda inizialmente: ignora questo link. Oppure, se
> lo leggi, salta direttamente alle conclusioni (dove dice *come* si usa
> super, evidentemente dopo che gli hanno corretto tutte le cappellate che ha
> scritto prima).
Ciao
Rieccomi.
Scusate se non ho risposto prima ma stavo cercando di arrangiarmi (anche
leggendo l'articolo sopra), ma ho ancora qualche problema...
Ho modificato il codice cosė:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
class Cwt(object):
fourierwl=1.00
def _log2(self, x):
return int( NP.log(float(x))/ NP.log(2.0)+0.0001 )
def __init__(self, data, largestscale=1, notes=0, order=2,
scaling='linear',omega0=5):
super(Morlet, self).__init__(data, largestscale=1, notes=0,
order=2, scaling='linear')
self._omega0 = omega0
ndata = len(data)
self.order=order
self.scale=largestscale
self._setscales(ndata,largestscale,notes,scaling)
self.cwt= NP.zeros((self.nscale,ndata), NP.complex64)
omega=
NP.array(range(0,ndata/2)+range(-ndata/2,0))*(2.0*NP.pi/ndata)
datahat=NP.fft.fft(data)
self.fftdata=datahat
for scaleindex in range(self.nscale):
currentscale=self.scales[scaleindex]
self.currentscale=currentscale # for internal use
s_omega = omega*currentscale
psihat=self.wf(s_omega)
psihat = psihat * NP.sqrt(2.0*NP.pi*currentscale)
convhat = psihat * datahat
W = NP.fft.ifft(convhat)
self.cwt[scaleindex,0:ndata] = W
return
def _setscales(self,ndata,largestscale,notes,scaling):
if scaling=="log":
if notes<=0: notes=1
# adjust nscale so smallest scale is 2
noctave=self._log2( ndata/largestscale/2 )
self.nscale=notes*noctave
self.scales=NP.zeros(self.nscale,float)
for j in range(self.nscale):
self.scales[j] =
ndata/(self.scale*(2.0**(float(self.nscale-1-j)/notes)))
elif scaling=="linear":
nmax=ndata/largestscale/2
self.scales=NP.arange(float(2),float(nmax))
self.nscale=len(self.scales)
else: raise ValueError, "scaling must be linear or log"
return
def getdata(self):
return self.cwt
def getcoefficients(self):
return self.cwt
def getpower(self):
return (self.cwt* NP.conjugate(self.cwt)).real
def getscales(self):
return self.scales
def getnscale(self):
return self.nscale
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# wavelet classes
class Morlet(Cwt):
_omega0=0.001 ##5.0
fourierwl=4* NP.pi/(_omega0+ NP.sqrt(2.0+_omega0**2))
def wf(self, s_omega):
H=(s_omega>0)*1.
xhat=0.75112554*( NP.exp(-(s_omega-self._omega0)**2/2.0))*H
return xhat
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Se lo richiamo con
cw=Morlet(A,maxscale,notes,scaling=scaling,omega0=5)
Mi da errore:
super(Morlet, self).__init__(data, largestscale=1, notes=0, order=2,
scaling='linear')
RuntimeError: maximum recursion depth exceeded while calling a Python object
Spero di non spazientirvi troppo.
Ho provato l'esempio dell'articolo ma non mi funziona... quindi non
riesco a fare prove accurate.
Lo scopo (penso si sia capito) č di attribuire un determinato valore a
_omega0 nella classe Morlet
Quindi non dovrebbe essere cosė il comando super??
def __init__(self, data, largestscale=1, notes=0, order=2,
scaling='linear',omega0=5):
super(Morlet, self).__init__(omega0=5)
self._omega0 = omega0
Idee?
Scusate l'ingnoranza ma sto cercando di imparare
Grazie a tutti per le risposte
Ciao
Matteo
Maggiori informazioni sulla lista
Python