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

Reply via email to