Python上升/下降沿示波器式触发器

标签 python numpy edge-detection

我正在尝试根据触发值检测 numpy 向量中的上升沿和/或下降沿。这有点像示波器触发的工作原理。

numpy 向量包含浮点值。触发器本身是一个浮点值。我希望它能这样工作:

import numpy as np
data = np.array([-1, -0.5, 0, 0.5, 1, 1.5, 2])
trigger = rising_edge(data, 0.3)
print(trigger)

[3]

换句话说,它会像 np.where 一样工作,返回一个包含条件为真的位置的向量。

我知道我可以简单地遍历向量并获得相同的结果(这就是我正在做的),但正如您想象的那样,它并不理想。 numpy 中是否内置了一些可以使用优化的 C 代码执行此操作的功能?或者可能在其他图书馆?

谢谢。

最佳答案

我们可以切片 one-off并与小于和大于的触发器进行比较,就像这样 -

In [41]: data = np.array([-1, -0.5, 0, 0.5, 1, 1.5, 2, 0, 0.5])

In [43]: trigger_val = 0.3

In [44]: np.flatnonzero((data[:-1] < trigger_val) & (data[1:] > trigger_val))+1
Out[44]: array([3, 8])

如果您还想包括相等性,即 <=>= ,只需将其添加到比较中即可。

要同时包含上升沿和下降沿,请以另一种方式添加比较 -

In [75]: data = np.array([-1, -0.5, 0, 0.5, 1, 1.5, 2, 0.5, 0])

In [76]: trigger_val = 0.3

In [77]: mask1 = (data[:-1] < trigger_val) & (data[1:] > trigger_val)

In [78]: mask2 = (data[:-1] > trigger_val) & (data[1:] < trigger_val)

In [79]: np.flatnonzero(mask1 | mask2)+1
Out[79]: array([3, 8])

关于Python上升/下降沿示波器式触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365310/

相关文章:

java - 如何正确使用3x3高斯滤波器

ruby - 用多边形近似形状

python - 您可以将多个路径传递给 Django runserver --pythonpath 指令吗?

python - 在 Python : Given an original array of numbers, 中,我将如何创建一个包含特定范围内原始数组值的新数组?

python - 如何将多个数组减为一个?

python - 无法按名称访问列数据

python - 矢量化 numpy 追加循环

python - 打印列表中列表的名称

Python:Scrapy start_urls 列表能够处理 .format()?

c++ - 清除边缘检测算法中的噪声