在numpy中,我想检测信号从(之前)低于某个阈值到高于另一个特定阈值的点。这适用于去抖动、在噪声存在的情况下精确零交叉等方面。
像这样:
像这样:
import numpy
# set up little test problem
N = 1000
values = numpy.sin(numpy.linspace(0, 20, N))
values += 0.4 * numpy.random.random(N) - 0.2
v_high = 0.3
v_low = -0.3
# find transitions from below v_low to above v_high
transitions = numpy.zeros_like(values, dtype=numpy.bool)
state = "high"
for i in range(N):
if values[i] > v_high:
# previous state was low, this is a low-to-high transition
if state == "low":
transitions[i] = True
state = "high"
if values[i] < v_low:
state = "low"
我希望找到一种不需要显式循环数组的方法来实现这个,但是我想不出任何方法,因为每个状态值都依赖于前一个状态。有没有可能在不使用循环的情况下完成?
cnt-1
是一个索引数组,指向ind
,而ind
本身是一个索引数组,指向lo_or_hi
。cnt
可以被看作是“迄今为止我们已经遇到的外部值的数量”,由于ind
是外部值的索引列表,所以cnt-1
实际上给出了最后一个外部值的索引,以便“锁定”。非常令人费解。 - Etienne Dechamps