Python - 两个信号与内部 NaN 的互相关

标签 python numpy math scipy

我得到两个信号 S1 和 S2(两个值数组),我想知道 S1 是否与 S2 相同但已移位(S1 和 S2 的图形表示相同,但​​ S1 将移动到右或左)

问题是:我的算法包含插值 scipy.interpolate.interp1d,并且该函数在数组中输入 NaN 值。

当我尝试将 S1 和 S2 与内部的 NaN 相关联时,相关数组始终为 [NaN, NaN, NaN, ... , NaN, NaN, NaN]

我的目的是: 1)检测S1和S2是否是相同的信号(如果相关性高于某个阈值,我会认为它们是相同的信号) 2)如果有,检测它们之间的变化,以便我能够将其删除

为了说明我的算法,我创建了一个简单的代码

import numpy as np
from scipy.signal import correlate

norm = np.linalg.norm

x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])

corr = correlate(x, y)

print(corr/(norm(x)*norm(y)))

这里的相关函数是scipy.signal.correlate,但我也尝试了np.correlate,得到了相同的结果

从 stackoverflow 帖子中,我尝试了这种方式:

x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])

normx = norm(x[~np.isnan(x)])
normy = norm(y[~np.isnan(y)])

maskx = np.ma.array(x, mask=np.isnan(x))
masky = np.ma.array(y, mask=np.isnan(y))

corr = correlate(maskx, masky)

但我仍然只得到 NaN 值..

我是不是做错了什么?

最佳答案

如果任何信号包含 NaN,则 retusrn 将全部为 NaN。

<小时/>

使用它来最初删除 nan,然后使用相关函数:

x = np.array([np.nan,1,2,3,0,0,np.nan])
y = np.array([1,2,3,0,0,np.nan,np.nan,np.nan])

x = x[~np.isnan(x)]
y = y[~np.isnan(y)]

corr = np.corrcoef(x, y)

#corrcoef returns the normalised covariance matrix so you want the [1,0] or [0,1] element of this matrix
print(corr[1,0])
#1.0

关于Python - 两个信号与内部 NaN 的互相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52802229/

相关文章:

python - 删除轴刻度但使用 Matplotlib/ggplot 样式保留网格

python - python 中的泰勒级数问题 (sympy)

python - 离散傅立叶变换的傅立叶级数

algorithm - 从给定的数字中,确定三个相近的数字,其乘积是原始数字

javascript - 玩具箱挑战 - 电子商务装运/容器拆分

python - 指定顺序 numpy 数组

python - One Hot Encoder-按类别分类

python-2.7 - 无法将制表符分隔的文件读入 numpy 二维数组

unity-game-engine - 与 的幂相反

python - (python) 使用线程获取股票市场的最后值(value)