我正在尝试了解如何正确使用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输入数组。如果
sorter
是None
,那么它必须按升序排序,否则排序器必须是索引数组 排序。(...
(格式已添加(
因此,您必须提供一个按升序排序的数组。
然而,对于数值数据来说,解决这个问题很容易:你只需使用否定:
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.