我试图了解如何正确使用numpy.searchsorted来查找插入元素的正确索引。当我运行以下内容时:
e = np.array([9,8,7,6])
np.searchsorted(e,5)
我得到的输出是0,这是错误的,因为我希望4作为答案。 searchsorted可用于按降序排列的数组吗?如果我需要按降序保持数组,我有哪些选项?非常感谢!
答案 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输入数组。如果
sorter
为None
,则必须按升序排序,否则排序器必须是索引数组 排序。(...)
(已添加格式)
因此,您必须提供以升序顺序排序的数组。
然而,很容易解决这个问题的数值数据:你只需使用否定:
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。