我有一个 numpy 数组,其中包含一堆单调递增的值。说,
a = [1,2,3,4,6,10,10,11,14]
a_arr=np.array(a)
Also say
thresh = 4
我想创建一个包含子集索引的数组a_arr
它逐步遍历数组,选择元素但忽略至少没有间隔的元素thresh
远离最后的选择。用算法可以更容易地描述这一点:
def select_idx(a, thresh):
ret = []
for idx, elt in enumerate(a):
if len(ret) == 0 or elt >= a[ret[-1]] + thresh:
ret.append(idx)
return ret
显然我可以使用这个函数来做到这一点,但这看起来很慢。有什么方法可以在 numpy 中对其进行向量化吗?
Thanks.
附:在此示例中,select_idx(a, thresh) = [0, 4, 5, 8]
Edit:这个问题的近似版本可能更容易矢量化:将数轴划分为大小的桶thresh
,我猜从 a 中的第一个值开始。因此,此示例中的存储桶分隔符将为 0、4、8、12、16...。选择作为存储桶中第一个元素的数字的索引。 (是的,我意识到这与我之前写的不一样。)