numpy.searchsorted#

numpy.searchsorted(a, v, side='left', sorter=None)[源代码]#

查找应在何处插入元素以维持顺序的索引.

查找已排序的数组 a 中的索引,以便如果在索引之前插入 v 中的相应元素,则 a 的顺序将被保留.

假设 a 已排序:

side

返回的索引 i 满足

left

a[i-1] < v <= a[i]

right

a[i-1] <= v < a[i]

参数:
a一维类数组

输入数组.如果 sorter 为None,则它必须按升序排序,否则 sorter 必须是一个对其进行排序的索引数组.

varray_like

要插入到 a 中的值.

side{‘left’, ‘right’},可选

如果为“left”,则返回找到的第一个合适位置的索引. 如果为“right”,则返回最后一个此类索引. 如果没有合适的索引,则返回 0 或 N(其中 N 是 a 的长度).

排序器1-D 类数组,可选

可选的整数索引数组,用于将数组 a 排序为升序.它们通常是 argsort 的结果.

返回:
indices整数或整数数组

v 形状相同的插入点数组,如果 v 是标量,则为整数.

参见

sort

返回数组的排序副本.

histogram

从 1-D 数据生成直方图.

注释

二分查找用于查找所需的插入点.

从 NumPy 1.4.0 开始, searchsorted 可以处理包含 nan 值的实数/复数数组.增强的排序顺序记录在 sort 中.

此函数使用与内置 Python bisect.bisect_left ( side='left' ) 和 bisect.bisect_right ( side='right' ) 函数相同的算法,该算法也在 v 参数中进行了矢量化.

示例

>>> import numpy as np
>>> np.searchsorted([11,12,13,14,15], 13)
2
>>> np.searchsorted([11,12,13,14,15], 13, side='right')
3
>>> np.searchsorted([11,12,13,14,15], [-10, 20, 12, 13])
array([0, 5, 1, 2])

当使用 sorter 时,返回的索引指的是 a 的排序数组,而不是 a 本身:

>>> a = np.array([40, 10, 20, 30])
>>> sorter = np.argsort(a)
>>> sorter
array([1, 2, 3, 0])  # Indices that would sort the array 'a'
>>> result = np.searchsorted(a, 25, sorter=sorter)
>>> result
2
>>> a[sorter[result]]
30  # The element at index 2 of the sorted array is 30.