gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:55:26 25 4
gpt4 key购买 nike

我得到两个信号 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com