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]- 参数:
- a1-D 类数组
输入数组.如果 sorter 为 None,则必须按升序排序,否则 sorter 必须是排序它的索引数组.
- varray_like
要插入到 a 的值.
- side{‘left’, ‘right’}, 可选
如果为"left",则给出找到的第一个合适位置的索引.如果为"right",则返回最后一个这样的索引.如果没有合适的索引,则返回 0 或 N(其中 N 是 a 的长度).
- sorter1-D array_like, 可选
整数索引的可选数组,将数组 a 排序为升序.它们通常是 argsort 的结果.
- 返回:
- indicesint 或 int 数组
插入点数组,其形状与 v 相同,如果 v 是标量,则为整数.
注释
使用二分查找来查找所需的插入点.
从 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.