我有一个已排序的numpy数组
X
,还有两个常量k
和delta
,它们不在X
中。我想找到与k
最接近且小于等于k
的最大值的索引,并且该值必须在k
的delta
范围内,即我想要:max {i | k - delta <= X[i] <= k } (1)
请注意,这个集合可能为空,在这种情况下,我会返回 None
。目前我觉得我的方法并不是最优的,因为它没有利用X
在第一步被排序的事实。
# Get the max from the set of indices in X satisfying (1)
idx = np.where((k-delta <= X) * (X <= k))[0].max()
我不确定在这种情况下Numpy有多聪明,因为它并不知道X
已经排序,因此(k-delta <= X) * (X <= k))
可能比必要的时间更长。请注意,由于我们自己知道数组已排序,因此可以使用.max()
。
有没有更优化的方法?
k
的前一个索引位置吗?这个事实极大地简化了解决方案。 - DeepSpacek
不在X
中,所以我必须先比较k
和X
中的元素 n。 - rwolstk
不一定在X
中。你可能需要在问题中澄清这一点。 - DeepSpace