Numpy: correlación cruzada normalizada (Trac # 1714)

Creado en 20 oct. 2012  ·  12Comentarios  ·  Fuente: numpy/numpy

_Boleto original http://projects.scipy.org/numpy/ticket/1714 el 15-01-2011 por el usuario de trac bubla, asignado a unknown._

Hola,
Hice un parche que extiende la función correlate para que pueda calcular la correlación cruzada normalizada ahora
Consulte [ http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross -correlation el artículo de Wikipedia].

También he añadido documentación y un doctest simple, por supuesto.
El parche está contra el último maestro de Git.

01 - Enhancement Patch numpy.core

Comentario más útil

Hay una respuesta en SO que apunta aquí: https://stackoverflow.com/a/5639626/5392420

También tiene incluido el código más relevante. Como el archivo adjunto anterior ya no está disponible (al menos para mí), pensé que podría ser útil tener esto como un comienzo para la implementación.

También puedo confirmar que, al menos en mi caso, funciona para "normalizar" los vectores de entrada antes de usar np.correlate así y se devolverán valores razonables dentro de un rango 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')

Todos 12 comentarios

Archivo adjunto agregado por el usuario de trac bubla el 15-01-2011: correlate.parch

_ @ rgommers escribió el 2011-03-29_

Dado que se trata de una nueva funcionalidad, debe preguntar en la lista de correo si se puede incluir.

Es necesaria una prueba unitaria, las pruebas de documentación no se ejecutan de forma predeterminada en el conjunto de pruebas.

Esto puede resultar útil.

¿Alguien puede verificar si esto es correcto?

Me pregunto qué es lo correcto en combinación con mode='full' .

Sucede que necesito esta función, pero no estoy seguro de que sea correcta, excepto cuando mode = 'válido' Y ambas matrices tienen el mismo tamaño. En otras palabras, creo que la normalización debe aplicarse a cada ventana.

alguna actualización sobre el asunto?
¿Se ha probado el parche para todos los modos correlacionados?

@VlamV , como no hay nada aquí, no, no lo creo. Si tiene tiempo para arreglarlo para los otros modos, creo que podríamos agregarlo.

Alguna noticia sobre esto ?

¿No tendría más sentido dividir por la desviación estándar de la porción de a que se usa realmente (en el caso de mode=same o mode=full )

Además, ¿no tendría sentido usar las opciones bias y ddof de numpy.corrcoef lugar de simplemente dividir por len(a)

Hay una respuesta en SO que apunta aquí: https://stackoverflow.com/a/5639626/5392420

También tiene incluido el código más relevante. Como el archivo adjunto anterior ya no está disponible (al menos para mí), pensé que podría ser útil tener esto como un comienzo para la implementación.

También puedo confirmar que, al menos en mi caso, funciona para "normalizar" los vectores de entrada antes de usar np.correlate así y se devolverán valores razonables dentro de un rango 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 normalización por la parte de la señal a que se usa realmente (ver el comentario de @wilberth ) se implementa con métodos numpy en la función correlate_template en este repositorio: https://github.com/trichter/xcorr

¿Fue útil esta página
0 / 5 - 0 calificaciones