Numpy搜索按降序排序



我正在尝试了解如何正确使用numpy.searchsort来查找插入元素的正确索引。当我运行以下内容时:

e = np.array([9,8,7,6])
np.searchsorted(e,5)

我得到的输出是 0,这是错误的,因为我希望 4 作为答案。搜索排序是否可用于按降序排序的数组?如果我需要按降序排列数组,我有什么选项?多谢!

如文档中所述:

numpy.searchsorted(a, v, side='left', sorter=None)

查找应插入元素以保持顺序的索引。

将索引查找到一个排序数组中,这样,如果相应的 v中的元素入到索引之前,顺序为 被保存下来。

参数:

  • a : 一维array_like

    输入数组。如果sorterNone ,那么它必须按升序排序,否则排序器必须是索引数组 排序。

(...

(格式已添加(

因此,您必须提供一个按升序排序的数组。

然而,对于数值数据来说,解决这个问题很容易:你只需使用否定

e = np.array([9,8,7,6])
np.searchsorted(-e,-5)
#               ^  ^

您还可以按照@Psidom的建议使用反向数组(例如用于非数字数据(。

您可以搜索反转的数组,然后稍后反转索引:

e = np.array([9,8,7,6])
e.size - np.searchsorted(e[::-1], 5, side = "right")
# 4

请注意,如果您希望结果保持一致,此处的 side 参数需要相反才能直接搜索原始数组。

您可以使用

sorter可选参数来执行此操作。 根据文档,这通常是np.argsort(e)的结果:

array([3, 2, 1, 0])

您可以通过这种方式更有效地生产:

np.arange(len(e)-1, -1, -1)

然后:

np.searchsorted(e, 7.5, sorter=np.arange(len(e)-1, -1, -1))

给你 2.

最新更新