我正在尝试使用与
method="direct"
选项相关的 scipy 信号,我想知道是否可以将计算限制为所有可能滞后的子集。我的输入数组的大小约为 240,000,000 个条目,但我对 0 两侧大约 500k 的滞后感兴趣。通过查看 API 似乎不可能,但我很好奇我是否错过了或者有另一个库可以在 python 中执行此操作。
请注意,由于数据的大小和稀疏性,
method="fft"
选项不起作用。
更新:
我已经编写了代码来运行滞后子集的相关性计算,即 lag = range(-10_000,10_000) 但我很好奇是否有更好的方法和/或避免我重新发明轮子。
鉴于您的数据明显大于您正在寻找的滞后,您可以使用 for 计算每个滞后的相关性。
import numpy as np
def lcorr(x1, x2, maxlag):
C = np.zeros(2*maxlag+1);
# make sure to use arrays, not lists or other things that
# might generate copies when slicing
x1 = np.asarray(x1)
x2 = np.asarray(x2)
for i in range(-maxlag, maxlag+1):
# Get two lagged slices
if i < 0:
t1, t2 = x1, x2[-i:]
else:
t1, t2 = x1[i:], x2
# Crop to both slices to same length
t1 = t1[:len(t2)]
t2 = t2[:len(t1)]
# Dot product of the overlapped slices
C[maxlag+i] = np.dot(t1, t2)
return C