在列表中查找交替数字序列
Finding a sequence of alternating numbers in a list
我目前正在尝试实施第四条纳尔逊法则:
https://en.wikipedia.org/wiki/Nelson_rules
即给定一个长度为 N 的数字列表,我想知道是否存在在长度为 n 的方向上交替排列的连续数字序列。 'Alternating' 表示连续数字上升,然后下降,然后上升,依此类推
我的数据在 (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)]
我已经尝试了一些方法,none 结果得到了所需的输出。其中包括 np.diff() 和 np.sign() 之类的东西。我有一种感觉 itertools() 可以做到这一点,但我不能完全做到这一点。
非常感谢任何意见。
这是您算法的第一个切入点Python:
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)]
n = 5
t0, x0 = data.pop(0)
outliers = []
up = bool(x0 > 0)
for t, x in data:
if (x < x0 and up) or (x > x0 and not up):
if not outliers:
outliers = [(t0,x0)]
outliers.append((t,x))
up = not up
else:
if len(outliers) >= n:
print 'outliers =', outliers
outliers = []
t0,x0 = t,x
if len(outliers) >= n:
print 'outliers =', outliers
我目前正在尝试实施第四条纳尔逊法则: https://en.wikipedia.org/wiki/Nelson_rules
即给定一个长度为 N 的数字列表,我想知道是否存在在长度为 n 的方向上交替排列的连续数字序列。 'Alternating' 表示连续数字上升,然后下降,然后上升,依此类推
我的数据在 (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)]
我已经尝试了一些方法,none 结果得到了所需的输出。其中包括 np.diff() 和 np.sign() 之类的东西。我有一种感觉 itertools() 可以做到这一点,但我不能完全做到这一点。
非常感谢任何意见。
这是您算法的第一个切入点Python:
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)]
n = 5
t0, x0 = data.pop(0)
outliers = []
up = bool(x0 > 0)
for t, x in data:
if (x < x0 and up) or (x > x0 and not up):
if not outliers:
outliers = [(t0,x0)]
outliers.append((t,x))
up = not up
else:
if len(outliers) >= n:
print 'outliers =', outliers
outliers = []
t0,x0 = t,x
if len(outliers) >= n:
print 'outliers =', outliers