numpy.searchsorted#

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

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

查找已排序数组a中的索引,以便如果将v中的对应元素插入到这些索引之前,a的顺序将保持不变。

假设a已排序

side

返回的索引i满足

left

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

right

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

参数:
a一维数组类

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

v数组类

要插入到a中的值。

side{'left', 'right'},可选

如果为 'left',则给出找到的第一个合适位置的索引。如果为 'right',则返回最后一个这样的索引。如果没有合适的索引,则返回 0 或 N(其中 N 是a的长度)。

sorter一维数组类,可选

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

返回值:
indices整数或整数数组

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

另请参阅

sort

返回数组的已排序副本。

histogram

根据一维数据生成直方图。

备注

使用二分查找来查找所需的插入点。

从 NumPy 1.4.0 开始,searchsorted 可用于包含nan值的实数/复数数组。增强的排序顺序在sort中进行了说明。

此函数使用与内置 python bisect.bisect_leftside='left')和bisect.bisect_rightside='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.