_Billet original http://projects.scipy.org/numpy/ticket/1714 le 2011-01-15 par l'utilisateur trac bubla, attribué à inconnu._
Bonjour,
J'ai créé un correctif qui étend la fonction correlate
afin qu'elle puisse maintenant calculer la corrélation croisée normalisée
Voir [ http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross -correlation l'article Wikipedia].
J'ai ajouté de la documentation et un simple doctest aussi, bien sûr.
Le patch est contre le dernier maître Git
Pièce jointe ajoutée par l'utilisateur du trac bubla le 15-01-2011 : correlate.parch
_@rgommers a écrit le 2011-03-29_
Comme il s'agit d'une nouvelle fonctionnalité, vous devez demander sur la liste de diffusion si cela peut être inclus.
Un test unitaire est nécessaire, les doctests ne sont pas exécutés par défaut dans la suite de tests.
Cela pourrait être utile.
Quelqu'un peut-il vérifier si c'est correct ?
Je me demande ce qui est juste en combinaison avec mode='full'
.
Il se trouve que j'ai besoin de cette fonctionnalité, mais je ne suis pas sûr qu'elle soit correcte, sauf lorsque mode='valid' ET que les deux tableaux ont la même taille. En d'autres termes, je pense que la normalisation doit être appliquée à chaque fenêtre.
des mises à jour sur le sujet ?
Le correctif a-t-il été testé pour tous les modes corrélés ?
@VlamV , comme il n'y a rien ici, non, je ne le crois pas. Si vous avez le temps de le corriger pour les autres modes, je pense que nous pourrions l'ajouter.
Des nouvelles à ce sujet ?
ne serait-il pas plus logique de diviser par l'écart type de la portion de a
qui est réellement utilisée (dans le cas de mode=same
ou mode=full
)
n'aurait-il pas non plus de sens d'utiliser les options bias
et ddof
de numpy.corrcoef
au lieu de simplement diviser par len(a)
Il y a une réponse à SO qui pointe ici : https://stackoverflow.com/a/5639626/5392420
Il contient également le code le plus pertinent. Comme la pièce jointe ci-dessus n'est plus disponible (du moins pour moi), j'ai pensé qu'il pourrait être utile de l'avoir comme point de départ pour la mise en œuvre.
Je peux également confirmer que - du moins dans mon cas - cela fonctionne pour "normaliser" les vecteurs d'entrée avant d'utiliser np.correlate
comme ceci et des valeurs raisonnables seront renvoyées dans une plage de [-1,1] :
a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')
La normalisation par la portion de signal a qui est réellement utilisée (voir le commentaire de @wilberth ) est implémentée avec des méthodes numpy dans la fonction correlate_template de ce référentiel : https://github.com/trichter/xcorr
Commentaire le plus utile
Il y a une réponse à SO qui pointe ici : https://stackoverflow.com/a/5639626/5392420
Il contient également le code le plus pertinent. Comme la pièce jointe ci-dessus n'est plus disponible (du moins pour moi), j'ai pensé qu'il pourrait être utile de l'avoir comme point de départ pour la mise en œuvre.
Je peux également confirmer que - du moins dans mon cas - cela fonctionne pour "normaliser" les vecteurs d'entrée avant d'utiliser
np.correlate
comme ceci et des valeurs raisonnables seront renvoyées dans une plage de [-1,1] :