2017-06-30 4 views
0

Hallo Ich mag diese Autokorrelation Skript zu vermeiden, verwenden, fand ich hier:Wie Karte Objektfehler in dieser Autokorrelation Skript

https://stackoverflow.com/a/20463466/8238271

import numpy 
def acf(series): 
    n = len(series) 
    data = numpy.asarray(series) 
    mean = numpy.mean(data) 
    c0 = numpy.sum((data - mean) ** 2)/float(n) 

    def r(h): 
     acf_lag = ((data[:n - h] - mean) * (data[h:] - mean)).sum()/float(n)/c0 
     return round(acf_lag, 3) 
    x = numpy.arange(n) # Avoiding lag 0 calculation 
    acf_coeffs = map(r, x) 
    return acf_coeffs 

ich dieses numpy Array bin mit:

a=numpy.array([1, 2, 3,7,2,5,1,6,7,2,1,1,1,6,7,2]) 

Und ich rufe diesen Code wie folgt aus:

z2=acf(a) 
print (z2) 

Dann wird der Terminal zurückkehrt:

<map object at 0x ....> (nicht sicher, was die Zahl ist so besser hier nicht aufschreiben)

Wie kann ich diese Funktion für Autokorrelation nennen nacheilt 1,2,3,4 und so richtig ?

Bitte helfen!

Antwort

0

Ich gehe davon aus, dass Sie stattdessen eine list zurückgegeben werden möchten.

acf_coeffs = map(r, x) 

Um dies:

acf_coeffs = list(map(r, x)) 

Erläuterung:

, das zu tun, diese Zeile ändern Der Code, den Sie wahrscheinlich für Python 2. Die map geschrieben kopiert wurde Funktion in geändert wurde Python 3, um ein Objekt map anstelle eines list zurückzugeben. So wickeln Sie es in einen list Aufruf ein, um eine list zu erhalten.

+0

danke, funktioniert gut, ist es möglich, es als ein numpy Array anstelle einer Liste zu nennen? – Jason

+0

Sie müssen noch 'list' verwenden. 'np.array (liste (map (....)))'. – hpaulj

Verwandte Themen