Die naive Lösung ist in der Tat sehr langsam (mindestens einige Minuten - ich bin nicht geduldig genug):
%Vor%Sie können die Korrelation von Hand berechnen, von den ersten Momenten und Kommenten, aber es dauert noch einige Minuten.
%Vor%Sobald Sie die Zeitreihe der Korrelationen haben, Es ist leicht, die Position der Top 300 zu extrahieren.
%Vor%Der folgende Code findet die 300 Segmente, nach denen Sie suchen und läuft in 8 Sekunden auf meinem nicht zu leistungsstarken Windows-Laptop, also sollte es schnell genug für Ihre Zwecke sein.
Zunächst wird eine 30-mal-199971-Matrix (% co_de%) erstellt, deren Spalten alle der Länge 30 "Zeitreihensegmente" enthalten, die Sie untersuchen möchten. Ein einzelner Aufruf von %code% , der auf dem Vektor %code% und der Matrix %code% arbeitet, berechnet dann alle gewünschten Korrelationskoeffizienten. Schließlich wird der resultierende Vektor untersucht, um die 300 Sequenzen mit den höchsten Korrelationskoeffizienten zu identifizieren.
%Vor%Ich habe eine lange numerische Zeitreihendaten von etwa 200.000 Zeilen (nennen wir es Z ).
In einer Schleife unterteile ich x (etwa 30) aufeinanderfolgende Zeilen von Z gleichzeitig und behandle sie als Abfragepunkt q .
Ich möchte innerhalb von Z die y (~ 300) korrelierten Zeitreihensegmente der Länge x (am meisten korreliert mit q ).
Was ist ein effizienter Weg, dies zu erreichen?