torch.bucketize

torch.bucketize(input, boundaries, *, out_int32=False, right=False, out=None) Tensor

返回input中每个值所属桶的索引,其中桶的边界由boundaries定义。返回一个与input大小相同的张量。如果right为False(默认情况下),则左边界是开区间。需要注意的是,这种行为与numpy.digitize的行为相反。更正式地说,返回的索引满足以下规则:

right

返回的索引符合要求

boundaries[i-1] < input[m][n]...[l][x] <= boundaries[i]

boundaries[i-1] <= input[m][n]...[l][x] < boundaries[i] 可以理解为:`input[m][n]...[l][x]` 的值大于等于 `boundaries[i-1]` 且小于 `boundaries[i]`。

参数
  • 输入 (Tensor标量) – 包含搜索值的 N 维张量或标量。

  • boundaries (Tensor) – 1-D 张量,其元素必须是严格递增的序列;如果不是,则返回值未定义。

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

  • right (bool, 可选) – 如果设置为 False,则返回找到的第一个合适的位置。如果设置为 True,则返回最后一个合适的索引位置。如果没有找到合适的索引,对于非数值(例如 nan、inf)值返回 0 或者 boundaries 的大小(超出最后一个索引)。换句话说,如果为 False,则从 boundaries 中获取每个输入值的下界索引。如果为 True,则获取上界索引。默认值为 False。

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

示例:

>>> boundaries = torch.tensor([1, 3, 5, 7, 9])
>>> boundaries
tensor([1, 3, 5, 7, 9])
>>> v = torch.tensor([[3, 6, 9], [3, 6, 9]])
>>> v
tensor([[3, 6, 9],
        [3, 6, 9]])
>>> torch.bucketize(v, boundaries)
tensor([[1, 3, 4],
        [1, 3, 4]])
>>> torch.bucketize(v, boundaries, right=True)
tensor([[2, 3, 5],
        [2, 3, 5]])
本页目录