Numpy: corrélation croisée normalisée (Trac #1714)

Créé le 20 oct. 2012  ·  12Commentaires  ·  Source: numpy/numpy

_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

01 - Enhancement Patch numpy.core

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] :

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

Tous les 12 commentaires

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

Cette page vous a été utile?
0 / 5 - 0 notes