Ihre erste Frage zu beantworten, ist numpy.correlate(a, v, mode)
die Faltung von a
mit der Rückseite v
Durchführung und gibt die von dem angegebenen Modus abgeschnitten Ergebnisse. Die definition of convolution, C (t) = Σ -∞ < i < ∞ ein i v t + i wo -∞ < t < ∞, von für die Ergebnisse ermöglicht -∞ bis ∞, aber man kann natürlich nicht Speichern Sie ein unendlich langes Array. . So ist es werden abgeschnitten hat, und das ist, wo der Modus kommt Es gibt 3 verschiedene Modi: voll, gleich, & gültig:
- „voll“ Modus liefert Ergebnisse für jede
t
wo beide a
und v
haben einige Überschneidungen.
- Der Modus "same" liefert ein Ergebnis mit der gleichen Länge wie der kürzeste Vektor (
a
oder v
).
- Der Modus "valid" gibt nur Ergebnisse zurück, wenn
a
und v
einander vollständig überlappen. Die documentation für numpy.convolve
gibt mehr Details zu den Modi.
Für Ihre zweite Frage, ich denke numpy.correlate
ist Sie die Autokorrelation zu geben, wird es geben Sie nur ein wenig mehr als gut. Die Autokorrelation wird verwendet, um herauszufinden, wie ähnlich ein Signal oder eine Funktion für sich selbst bei einer bestimmten Zeitdifferenz ist. Bei einer Zeitdifferenz von 0 sollte die Autokorrelation am höchsten sein, da das Signal mit sich selbst identisch ist. Sie haben also erwartet, dass das erste Element im Autokorrelations-Ergebnisfeld das größte ist. Die Korrelation beginnt jedoch nicht bei einer Zeitdifferenz von 0. Sie beginnt bei einer negativen Zeitdifferenz, schließt sich auf 0 und wird dann positiv.Das heißt, Sie erwarten:
Autokorrelation (a) = Σ -∞ < i < ∞ ein i v t + i wobei 0 < = t < ∞
Aber was du hast war:
Autokorrelation (a) = Σ -∞ ∞ < i < a i v t + i wo -∞ < t < ∞
Was Sie tun müssen, um die letzte Hälfte des Korrelationsergebnis wird nehmen, und das sollte die Autokorrelation sein die Sie suchen. Eine einfache Python-Funktion zu tun, das wäre:
def autocorr(x):
result = numpy.correlate(x, x, mode='full')
return result[result.size/2:]
werden Sie, natürlich, müssen Fehler sicherstellen Überprüfung, dass x
ist eigentlich ein 1-d-Array. Diese Erklärung ist wahrscheinlich auch nicht die mathematisch strengste. Ich habe Unendlichkeiten herumgeworfen, weil die Definition der Faltung sie benutzt, aber das gilt nicht unbedingt für die Autokorrelation. Also, der theoretische Teil dieser Erklärung mag etwas wackelig sein, aber hoffentlich sind die praktischen Ergebnisse hilfreich. Thesepages auf Autokorrelation sind ziemlich hilfreich, und können Ihnen einen viel besseren theoretischen Hintergrund geben, wenn Sie nichts dagegen haben, durch die Notation und schwere Konzepte waten.
Siehe auch: http://stackoverflow.com/questions/12269834/is-there-any-numpy-autocorrellation-function-with-standardized-output für Informationen über normalisierte Autokorrelation. – amcnabb