寻找离散自相关函数的 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
我想评估自相关函数,
我已经编写了以下代码来计算 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