寻找离散自相关函数的 Pythonic 方法

Pythonic way to find discrete autocorrelation function

我想评估自相关函数, 在离散化版本中,积分可以替换为

我已经编写了以下代码来计算 n 的总和,但无法理解如何进一步进行。

from pylab import* 
from numpy import*

jx=random.random(100000)

Mt=len(jx)

def Hcacf(n):       
    Sum=0.0
    coeff1=0
    while coeff1 < (Mt-n) :
        Sum = Sum + jx[coeff1]*jx[coeff1+n]
        coeff1=coeff1+1
    avg = Sum*1.0 / (Mt-n)
    return avg

autocorrelation=[]
for n in linspace(0, Mt-1, num=Mt, endpoint=False):
    ac=Hcacf(n+1)
    autocorrelation.append(ac)

lag=linspace(0,Mt-1,Mt)
plot(lag,autocorrelation,marker='o')
show()

但是运行需要很长时间。有人可以建议我使用 pythonic 工具更快地完成相同过程的更好方法吗?

你不能只在函数上使用 numpy.correlate 并在最后乘以因数吗?你如何对待无限的支持?你不需要一些收敛条件(只是猜测......)?

这个 link 应该可以回答您的问题。本质上,引用 link 中的答案,您可以使用 np.correlate 定义自相关函数,如下所示

import numpy as np
def AutoCorrelation(x):
    x = np.asarray(x)
    y = x-x.mean()
    result = np.correlate(y, y, mode='full')
    result = result[len(result)//2:]
    result /= result[0]
    return result