Numpy搜索降序排序

时间:2017-03-29 14:00:14

标签: python arrays numpy

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

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

我得到的输出是0,这是错误的,因为我希望4作为答案。 searchsorted可用于按降序排列的数组吗?如果我需要按降序保持数组,我有哪些选项?非常感谢!

3 个答案:

答案 0 :(得分:5)

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

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

请注意,如果您希望结果一致,则side参数需要与直接搜索原始数组相反。

答案 1 :(得分:5)

the documentation中所述:

  

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

     

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

     

将索引查找到已排序的数组中,如果相应的话   v中的元素在索引之前插入,即a的顺序   被保留。

     

参数:

     
      
  • a:1-D array_like

         

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

  •   
     

(...)

(已添加格式)

因此,您必须提供以升序顺序排序的数组。

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

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

您也可以使用@Psidom建议的反转数组(例如非数字数据)。

答案 2 :(得分:1)

您可以使用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。