gpt4 book ai didi

python - 如何在连续信号中找到无效值?

转载 作者:行者123 更新时间:2023-12-01 03:20:40 25 4
gpt4 key购买 nike

问题

我有一些 float 组,我需要识别值卡住的索引,其中数组在一段时间内具有相同的值。

示例

x = np.linspace( 0, 30, 1000 )
y1 = np.sin( x )
y2 = np.sin( x )
# Introduce some errors!
y2[ (x>5)&(x<=8) ] = -0.2
y2[ (x>15)&(x<=16) ] = -1
y2[ (x>16)&(x<17) ] = 1

y1y2 如下所示:

enter image description here

我想知道那些水平线在哪里。

<小时/>

我已经尝试过

  • 循环:

    error = np.zeros_like( y2 )
    for i in range(1,y2.shape[-1]-1):
    if y2[i-1] == y2[i] == y2[i+1]:
    error[i-1] = 1
    error[i] = 1
    error[i+1] = 1

当然,我可以在for之前定义一个窗口长度...但是,一旦我有多个针对不同列和周期的嵌套循环,它就会感觉很笨拙。

  • np.diff → 这里的问题是有时导数本身就是 0。此外,信号变化非常缓慢(温度)是很常见的,因此我最终会再次在循环中检查相邻(零)值。

  • 我开始寻找一些索引,例如:y2[ where(y2==previous(y2) & y2 == next(y2) ],但到目前为止尚未成功。这就是我现在正在尝试的,使用 pandas.DataFrame

我想要水平线出现的索引,或者用np.nan替换它们。我还需要能够对窗口宽度进行一些调整(最终很可能是 10 个值左右)。

有什么想法吗?

<小时/>

上下文

我实际上拥有的是一个具有温度测量功能的pandas.DataFrame,我可以在其中获取浮点值以及记录时间的时间戳。有时,误差似乎“卡住”并给出一条直线而不是测量值。有时它是最后一次重复测量,有时它只是一个随机值。我需要知道每个传感器何时发生故障。当然,每次失败的持续时间都不同。每个信号大约有 30,000 个元素长。

<小时/>

使用:python 3.5.2 numpy 1.11.1 pandas 0.18.1

最佳答案

你不能做这样的事情吗

dy2 = np.r_[1, np.diff(y2).astype(bool).astype(int), 1]
bnds = np.diff(dy2)
starts = np.where(bnds == -1)[0]
stops = np.where(bnds == 1)[0] + 1
keep = stops >= starts + min_length
starts = starts[keep]
stops = stops[keep]

关于python - 如何在连续信号中找到无效值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41962819/

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