gpt4 book ai didi

python - 在列表中查找交替数字的序列

转载 作者:行者123 更新时间:2023-12-01 04:38:14 25 4
gpt4 key购买 nike

我目前正在尝试实现第四尼尔森规则: 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 值序列适用于除第一个元组之外的所有内容。见下图: Alternating Sequence in Red

交替序列以红色突出显示。该规则查找连续 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() 可以做到这一点,但我无法完全做到这一点。

非常感谢您的任何意见。

最佳答案

这是用直接 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

关于python - 在列表中查找交替数字的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329781/

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