para responder a su primera pregunta, numpy.correlate(a, v, mode)
está realizando la convolución de a
con el reverso de v
y dando los resultados recortadas por el modo especificado. El definition of convolution, C (t) = Σ -∞ ∞ < i < un i v t + i donde -∞ < t < ∞, permite obtener resultados de -∞ a ∞, pero es obvio que no puede almacenar una matriz infinitamente larga. . Así que tiene que ser cortada, y que es donde entra en juego el modo en el Hay 3 modos diferentes: por completo, mismo, & válida:
- "Full" devuelve resultados para cada
t
donde tanto a
y v
tienen algunos se superponen
- "modo mismo" devuelve un resultado con la misma longitud que el vector más corto (
a
o v
).
- modo "válido" devuelve resultados solo cuando
a
y v
se superponen por completo. El documentation para numpy.convolve
brinda más detalles sobre los modos.
a su segunda pregunta, creo que es numpy.correlate
que le da la autocorrelación, sólo se le está dando un poco más también. La autocorrelación se usa para encontrar cuán similar es una señal, o función, a sí misma en una determinada diferencia de tiempo. En una diferencia de tiempo de 0, la autocorrelación debería ser la más alta porque la señal es idéntica a sí misma, por lo que esperaba que el primer elemento en la matriz de resultados de autocorrelación fuera el más grande. Sin embargo, la correlación no comienza en una diferencia de tiempo de 0. Comienza en una diferencia de tiempo negativa, se cierra a 0 y luego se vuelve positiva.Es decir, que se esperaba:
autocorrelación (a) = Σ -∞ ∞ < i < un i v t + i donde 0 = t < < ∞
Pero lo que tengo era:
autocorrelación (a) = Σ -∞ < i < ∞ un i v t + i donde -∞ ∞ < t <
Lo que hay que hacer es tomar la última mitad de su resultado de correlación, y que debe ser la autocorrelación que busca. Una función de Python sencilla de hacerlo sería:
def autocorr(x):
result = numpy.correlate(x, x, mode='full')
return result[result.size/2:]
Usted, por supuesto, la necesidad de comprobación de errores para asegurarse de que x
es en realidad una matriz 1-d. Además, esta explicación probablemente no sea la más matemáticamente rigurosa. He estado lanzando infinitos porque la definición de convolución los usa, pero eso no se aplica necesariamente a la autocorrelación. Por lo tanto, la parte teórica de esta explicación puede ser un poco inestable, pero es de esperar que los resultados prácticos sean útiles. Thesepages en la autocorrelación son muy útiles, y pueden proporcionarle una base teórica mucho mejor si no le importa vadear la notación y los conceptos pesados.
Consulte también: http://stackoverflow.com/questions/12269834/is-there-any-numpy-autocorrellation-function-with-standardized-output para obtener información acerca de autocorrelación normalizada. – amcnabb