我正在尝试在数组中找到值,这些位置的值会单调增加,以使值的总变化大于k。
即k = 5
和data = [1, 4, 5, 7, 10, 9, 6, 14, 3, 4]
我想回来:
[4, 7]
通常,数组将是浮点数。
编辑以进一步澄清:在示例中,数据值在两个时间间隔内单调增加大于5。第一个是从元素0到4(其中数据值增加9),第二个是从元素6到7(其中数据值增加8)。因此,我想报告每个有效间隔的结束。
我想避免循环并使其高效。如有必要,可以限制要检查的连续值的范围。
答案 0 :(得分:2)
这是一种矢量化方法 -
d = a[1:] - a[:-1]
mask = np.concatenate(( [False], d > 0, [False] ))
start = np.flatnonzero(mask[1:] > mask[:-1])
stop = np.flatnonzero(mask[1:] < mask[:-1])
count = np.bincount(np.repeat(np.arange(start.size) ,stop - start), d[mask[1:-1]])
out = stop[count > k]
示例输入,输出 -
In [202]: a # Adding in two monotonically decreasing elems at start for variety
Out[202]: array([10, 7, 1, 4, 5, 7, 10, 9, 6, 14, 3, 4])
In [203]: k = 5
In [204]: out
Out[204]: array([6, 9])