_Originalticket http://projects.scipy.org/numpy/ticket/1714 am 2011-01-15 von trac-Benutzer bubla, zugewiesen an unbekannt._
Hallo,
Ich habe einen Patch erstellt, der die Funktion correlate
, sodass sie jetzt normalisierte Kreuzkorrelation berechnen kann
Siehe [ http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross -correlation den Wikipedia-Artikel].
Ich habe natürlich auch Dokumentation und einfaches doctest hinzugefügt.
Der Patch ist gegen den neuesten Master Git
Anhang hinzugefügt von trac-Benutzer bubla am 15.01.2011: correlate.parch
_@rgommers schrieb am 29.03.2011_
Da es sich um eine neue Funktionalität handelt, sollten Sie in der Mailingliste nachfragen, ob diese aufgenommen werden kann.
Ein Unit-Test ist notwendig, Doctests werden in der Testsuite standardmäßig nicht ausgeführt.
Dies könnte nützlich sein.
Kann jemand überprüfen, ob das richtig ist?
Ich frage mich, was in Kombination mit mode='full'
richtig ist.
Ich benötige diese Funktion zufällig, bin mir aber nicht sicher, ob sie korrekt ist, außer wenn mode='valid' UND beide Arrays die gleiche Größe haben. Mit anderen Worten, ich denke, die Normalisierung muss auf jedes Fenster angewendet werden.
irgendwelche Updates zu dem Thema?
Wurde der Patch für alle Korrelationsmodi getestet?
@VlamV , da hier nichts ist, glaube ich nicht. Wenn Sie Zeit haben, das Problem für die anderen Modi zu beheben, könnten wir es hinzufügen.
Gibt es darüber irgendwelche Neuigkeiten ?
Wäre es nicht sinnvoller, den tatsächlich verwendeten Anteil von a
durch die Standardabweichung zu dividieren (bei mode=same
oder mode=full
)
Wäre es auch nicht sinnvoll, die Optionen bias
und ddof
von numpy.corrcoef
anstatt einfach durch len(a)
dividieren
Es gibt eine Antwort bei SO, die hier zeigt: https://stackoverflow.com/a/5639626/5392420
Es enthält auch den relevantesten Code. Da der obige Anhang (zumindest für mich) nicht mehr verfügbar ist, dachte ich, es könnte hilfreich sein, dies als Start für die Implementierung zu haben.
Ich kann auch bestätigen, dass es - zumindest in meinem Fall - funktioniert, um die Eingabevektoren zu "normalisieren", bevor np.correlate
wie folgt verwendet wird und vernünftige Werte innerhalb eines Bereichs von [-1,1] zurückgegeben werden:
a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')
Die Normalisierung nach dem tatsächlich verwendeten Teil des Signals a (siehe Kommentar von @wilberth ) wird mit numpy-Methoden in der correlate_template-Funktion in diesem Repository implementiert: https://github.com/trichter/xcorr
Hilfreichster Kommentar
Es gibt eine Antwort bei SO, die hier zeigt: https://stackoverflow.com/a/5639626/5392420
Es enthält auch den relevantesten Code. Da der obige Anhang (zumindest für mich) nicht mehr verfügbar ist, dachte ich, es könnte hilfreich sein, dies als Start für die Implementierung zu haben.
Ich kann auch bestätigen, dass es - zumindest in meinem Fall - funktioniert, um die Eingabevektoren zu "normalisieren", bevor
np.correlate
wie folgt verwendet wird und vernünftige Werte innerhalb eines Bereichs von [-1,1] zurückgegeben werden: