mars.tensor.searchsorted#
- mars.tensor.searchsorted(a, v, side='left', sorter=None, combine_size=None)[来源]#
查找元素应插入的位置以保持顺序。
找到排序张量 a 中的索引,以便如果将 v 中的相应元素插入到索引之前,a 的顺序将被保留。
假设 a 是已排序的:
边
返回的索引 i 满足
左
a[i-1] < v <= a[i]右边
a[i-1] <= v < a[i]- Parameters
a (1维数组) – 输入张量。如果 sorter 为 None,则它必须按升序排列,否则 sorter 必须是一个排序其的索引数组。
v (数组类似) – 要插入到 a 的值。
side ({'left', 'right'}, 可选) – 如果是‘left’,将返回找到的第一个合适位置的索引。如果是‘right’,返回最后一个索引。如果没有合适的索引,则返回 0 或 N(其中 N 是a的长度)。
sorter (1-D 类数组, 可选) – 可选的整数索引张量,将数组 a 排序为升序。它们通常是 argsort 的结果。
combine_size (int, 可选) – 拼接的块数。
- Returns
indices – 与v具有相同形状的插入点数组。
- Return type
整数的张量
备注
二分查找用于找到所需的插入点。
这个函数是内置python bisect.bisect_left (
side='left') 和 bisect.bisect_right (side='right') 函数的一个更快的版本, 同时在 v 参数中也进行了矢量化处理。示例
>>> import mars.tensor as mt
>>> mt.searchsorted([1,2,3,4,5], 3).execute() 2 >>> mt.searchsorted([1,2,3,4,5], 3, side='right').execute() 3 >>> mt.searchsorted([1,2,3,4,5], [-10, 10, 2, 3]).execute() array([0, 5, 1, 2])