Scipy 信号关联直接方法 - 计算所有可能滞后的子集的结果

问题描述 投票:0回答:1

我正在尝试使用与

method="direct"
选项相关的 scipy 信号,我想知道是否可以将计算限制为所有可能滞后的子集。我的输入数组的大小约为 240,000,000 个条目,但我对 0 两侧大约 500k 的滞后感兴趣。通过查看 API 似乎不可能,但我很好奇我是否错过了或者有另一个库可以在 python 中执行此操作。

请注意,由于数据的大小和稀疏性,

method="fft"
选项不起作用。

更新:

我已经编写了代码来运行滞后子集的相关性计算,即 lag = range(-10_000,10_000) 但我很好奇是否有更好的方法和/或避免我重新发明轮子。

python scipy correlation
1个回答
0
投票

鉴于您的数据明显大于您正在寻找的滞后,您可以使用 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
© www.soinside.com 2019 - 2024. All rights reserved.