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

整数的张量

另请参阅

sort

返回一个排序后的张量副本。

histogram

从一维数据生成直方图。

备注

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

这个函数是内置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])