我目前正试图实施第四条纳尔逊规则: https://en.wikipedia.org/wiki/Nelson_rules
即。给定长度为N的数字列表,我想知道是否存在在长度n方向上交替的连续数字序列。 “交替”表示连续数字上升,然后下降,然后上升等等。
我的数据是(t,x)元组。 't'代表时间轴,总是增加。 'x'是与时间和我们关注的系列相关的值。例如:
data = [(0, 2.5), (1, 2.1), (2, 1.7), (3, 2.0), (4, 0.3), (5, 0.8), (6, -1.2), (7, -0.5)]
这里,交替的x值序列用于除第一个元组之外的所有内容。见下图:
交替序列以红色突出显示。该规则连续查找14个点,但我想将其概括为连续的n个点。 (n< N)我不能只输出True或False,我想输出满足条件的点的元组。换句话说,输出将是:
outliers = [(1, 2.1), (2, 1.7), (3, 2.0), (4, 0.3), (5, 0.8), (6, -1.2), (7, -0.5)]
我尝试了一些东西,但都没有产生所需的输出。这些包括np.diff()和np.sign()之类的东西。我有一种感觉,itertools()可以做到这一点,但我不能完全到达那里。
非常感谢任何输入。
答案 0 :(得分:2)
这是你的算法在Python中的第一次削减:
Test