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

8gsdolmq  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(90)

我尝试使用scipy signal correlate和method="direct"选项,我想知道是否可以将计算限制为所有可能滞后的子集。我的输入数组的大小大约为240,000,000个条目。但我对0两侧大约500 k的滞后感兴趣。通过查看API,这似乎是不可能的,但我很好奇是否遗漏了什么,或者是否有另一个库可以执行此操作Python皮制成。
请注意,由于我的数据的大小和稀疏性,method="fft"选项不起作用。
更新:

  • 数组的维数大约为(240_000_000,)
  • 其中一个数组是稀疏的,但@hpaulj查看了源代码(Scipy将稀疏数组与signal.correlate一起使用)。scipy.sparse不能与scipy.signal一起使用

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

bvhaajcl

bvhaajcl1#

假设您的数据明显大于您正在寻找的滞后,您可以使用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

字符串

相关问题