Как я могу использовать numpy.correlate для автокорреляции? - PullRequest
87 голосов
/ 13 марта 2009

Мне нужно сделать автокорреляцию набора чисел, который, как я понимаю, является просто корреляцией набора с самим собой.

Я пробовал использовать коррелятную функцию numpy, но я не верю результату, поскольку он почти всегда дает вектор, в котором первое число не наибольшее, как должно быть.

Итак, этот вопрос действительно состоит из двух вопросов:

  1. Что именно делает numpy.correlate?
  2. Как я могу использовать его (или что-то еще) для автокорреляции?

Ответы [ 13 ]

0 голосов
/ 23 июля 2018

Простое решение без панд:

import numpy as np

def auto_corrcoef(x):
   return np.corrcoef(x[1:-1], x[2:])[0,1]
0 голосов
/ 12 апреля 2018

Я - вычислительный биолог, и когда мне пришлось вычислить авто / взаимные корреляции между парами временных рядов случайных процессов, я понял, что np.correlate не выполняет нужную мне работу.

Действительно, в np.correlate, по-видимому, отсутствует , усредняющее по всем возможным парам временных точек на расстоянии ?.

Вот как я определил функцию, выполняющую то, что мне нужно:

def autocross(x, y):
    c = np.correlate(x, y, "same")
    v = [c[i]/( len(x)-abs( i - (len(x)/2)  ) ) for i in range(len(c))]
    return v

Мне кажется, что ни один из предыдущих ответов не охватывает этот случай авто / взаимной корреляции: надеюсь, этот ответ может быть полезен для кого-то, работающего над случайными процессами, такими как я.

0 голосов
/ 02 февраля 2015

Я думаю, что реальный ответ на вопрос ОП кратко содержится в этом отрывке из документации Numpy.correlate:

mode : {'valid', 'same', 'full'}, optional
    Refer to the `convolve` docstring.  Note that the default
    is `valid`, unlike `convolve`, which uses `full`.

Это подразумевает, что при использовании без определения 'mode' функция Numpy.correlate будет возвращать скаляр, если задан один и тот же вектор для двух входных аргументов (т. Е. При использовании для автокорреляции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...