Shortcuts

torch.searchsorted

torch.searchsorted(sorted_sequence, values, *, out_int32=False, right=False, side=None, out=None, sorter=None) 张量

找到sorted_sequence最内层维度中的索引,使得如果在这些索引之前插入values中的对应值,当排序时,sorted_sequence中相应最内层维度的顺序将被保留。 返回一个与values相同大小的新张量。更正式地说,返回的索引满足以下规则:

sorted_sequence

right

返回的索引满足

一维

sorted_sequence[i-1] < values[m][n]...[l][x] <= sorted_sequence[i]

一维

sorted_sequence[i-1] <= values[m][n]...[l][x] < sorted_sequence[i]

N-D

sorted_sequence[m][n]...[l][i-1] < values[m][n]...[l][x] <= sorted_sequence[m][n]...[l][i]

N-D

sorted_sequence[m][n]...[l][i-1] <= values[m][n]...[l][x] < sorted_sequence[m][n]...[l][i]

Parameters
  • sorted_sequence (Tensor) – N-D 或 1-D 张量,包含在 最内层 维度上的单调递增序列,除非提供了 sorter,在这种情况下,序列不需要排序

  • (张量标量) – N维张量或一个标量,包含搜索值。

Keyword Arguments
  • out_int32 (bool, 可选) – 指示输出数据类型。如果为True,则为torch.int32,否则为torch.int64。 默认值为False,即默认输出数据类型为torch.int64。

  • right (bool, 可选) – 如果为False,返回找到的第一个合适的位置。如果为True,返回最后一个这样的索引。如果没有找到合适的索引,对于非数值(例如nan、inf)返回0,或者返回sorted_sequence中最内层维度的尺寸(即最内层维度的最后一个索引)。换句话说,如果为False,获取values中每个值在sorted_sequence对应的最内层维度上的下界索引。如果为True,则获取上界索引。默认值为False。side 做同样的事情并且是首选。如果side设置为“left”而此值为True,则会报错。

  • side (str, 可选) – 与 right 相同但更推荐使用。“left” 对应于 right 的 False,而 “right” 对应于 right 的 True。如果将此设置为 “left” 而 right 为 True,则会报错。默认值为 None。

  • 输出 (张量, 可选) – 输出张量,如果提供的话,必须与values的大小相同。

  • sorter (LongTensor, 可选) – 如果提供,一个与未排序的 sorted_sequence 形状匹配的张量,包含一个索引序列,该序列在 最内层维度上按升序对其进行排序

示例:

>>> sorted_sequence = torch.tensor([[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]])
>>> sorted_sequence
tensor([[ 1,  3,  5,  7,  9],
        [ 2,  4,  6,  8, 10]])
>>> values = torch.tensor([[3, 6, 9], [3, 6, 9]])
>>> values
tensor([[3, 6, 9],
        [3, 6, 9]])
>>> torch.searchsorted(sorted_sequence, values)
tensor([[1, 3, 4],
        [1, 2, 4]])
>>> torch.searchsorted(sorted_sequence, values, side='right')
tensor([[2, 3, 5],
        [1, 3, 4]])

>>> sorted_sequence_1d = torch.tensor([1, 3, 5, 7, 9])
>>> sorted_sequence_1d
tensor([1, 3, 5, 7, 9])
>>> torch.searchsorted(sorted_sequence_1d, values)
tensor([[1, 3, 4],
        [1, 3, 4]])