时间序列数据的numpy自相关函数

2024-05-16 21:11:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直试图用numpy计算一个自相关函数,如statistical mechanics中定义的那样。我发现的大多数文档都与correlate和{a3}等函数相关。然而,对于给定的随机变量x,这些函数似乎只是计算和

ACF(dt) = sum_{t=0}^T [(x(t)*x(t+dt)]

而不是平均水平

^{pr2}$

因此,实际上,要计算自相关函数,需要执行以下操作:

acf = np.correlate(x,x,mode='full')
acf_half = acf[acf.size / 2:]
ldata = len(acf)
acf = np.array([x/(ldata-i) for i,x in enumerate(acf_half)])

当然,我们需要从得到的acf中减去mean(x)**2才能正确。在

有人能确认这是正确的吗?在


Tags: 函数文档numpy定义npdta3statistical
1条回答
网友
1楼 · 发布于 2024-05-16 21:11:25

一般来说,自相关、相关等是和(积分)。有时它是标准化的,但不是像你上面写的那样平均化。这是因为它们是用mathematical convolution operation来定义的,它只是你在上面写的一个和的积分。在

stat-mech页面的括号表示一个热平均值,即在某个温度下,在许多不同状态下多次发生的“实验”的集合或时间平均值。这(有限温度)会导致波动,导致问题的“统计”性质,并导致相关性衰减(长程顺序丢失)。这仅仅意味着您应该找到几个数据集的自相关,并将这些数据集的平均到一起,但不要取函数的平均值。在

据我所知,您的代码试图用重叠长度的长度来衡量dt处的相关性,但我不认为这是正确的。在

关于<s>2的减法,这是在自旋模型的情况下,其中<s>是平均自旋(磁化),所以我相信你应该使用mean(x)**2是正确的。在

作为旁注,我建议使用mode='same'而不是'full',这样关联域就与输入的域相匹配,而不必只查看输出的一半(这里的输出是对称的,所以它实际上没有什么区别)。在

相关问题 更多 >