【发布时间】:2016-12-09 01:32:50
【问题描述】:
我有一个排序的 numpy 数组 X 以及两个常量 k 和 delta,它们不在 X 中。我想找到对应的索引,X 中的最大值小于或等于k,并且该值必须在delta 的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之前的吗?这一事实大大简化了解决方案。 -
是的,但是
k不在X中,所以我必须先比较k和元素nX -
我明白了。需要注意的是
k不一定在X中。你可能想在你的问题中澄清它。
标签: python arrays performance sorting numpy