Betrachten Sie einen eindimensionalen, reellen Vektor x , der Beobachtungen eines Prozesses darstellt, die in zeitlich gleichmäßigen Abständen gemessen werden. Wir nennen x eine Zeitreihe .
Lassen n die Länge bezeichnen x und x bezeichnen das arithmetische Mittel der x . Die Probe Autokovarianz - Funktion definiert ist als
für alle - n < h < n . Dies misst die lineare Abhängigkeit zwischen zwei Punkten derselben Reihe, die zu unterschiedlichen Zeiten beobachtet wurden.
Die Probe Autokorrelationsfunktion oder ACF, ist definiert als
Dies misst die lineare Vorhersagbarkeit der Reihe x zum Zeitpunkt t , die wir mit x t bezeichnen , wobei nur der Wert x t + h verwendet wird .
Beachten Sie, dass diese Stichprobenschätzungen nicht mit den naiven Berechnungen auf der Grundlage der theoretischen Eigenschaften übereinstimmen. Das heißt, die Autokorrelationsfunktion der Probe ist nicht gleich dem Pearson-Korrelationskoeffizienten von x mit der h- Schritt-Verzögerung von x .
Aufgabe
Wenn ein Array x und eine nichtnegative ganze Zahl h gegeben sind , drucken oder geben Sie die ersten h + 1- Verzögerungsautokorrelationen von x zurück , beginnend mit der Verzögerung 0. Die Verzögerungsautokorrelationen sind diejenigen, die negativen Eingaben in den obigen Formeln entsprechen.
Sie können annehmen, dass 0 < h < n , wobei n die Länge von x ist , und dass 2 < n <256.
Die Ausgabe sollte innerhalb von 1E-4 korrekt sein. Es gibt keine Einschränkungen hinsichtlich der Verwendung integrierter Funktionen oder der Laufzeit.
Beispiele
h, x -> output
--------------
5, [2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2] -> [1.00000000, 0.07659298, -0.06007802, -0.51144343, -0.02912874, -0.10468140]
1, [2134, 1863, 1877, 1877, 1492, 1249] -> [1.0000000, 0.3343041]
2, [13067.3, 13130.5, 13198.4] -> [1.0000000000, -0.0002854906, -0.4997145094]
quelle
Python 3,
147130126120 BytesDiese Lösung wird wahrscheinlich weiter ausgebaut. Es ist nur ein Anfang.
Sie können es nennen mit:
quelle
MATL , 20 Bytes
BEARBEITEN (20. Mai 2016): Ab Version 18.0.0 der Sprache
Y+
anstelle von verwendenX+
. Der Link enthält diese Änderung.Probieren Sie es online aus!
Die Korrelation hängt eng mit der Faltung zusammen. Wir normalisieren durch Subtrahieren des Mittelwerts, falten uns dann, normalisieren erneut durch Teilen durch den Maximalwert und wählen dann die gewünschten Verzögerungen aus.
quelle
Mathematica, 27 Bytes
Vielen Dank an LegionMammal978 für das Speichern von 1 Byte.
Wir könnten Jelly schlagen, wenn die Funktionsnamen nicht so lang wären.
Testfall
quelle
#2~CorrelationFunction~{#}&
.Oktave,
4737 Bytesquelle
disp
, weil Sie eine Funktionsausgabe zurückgeben)disp
.