评价此页

torch.histogramdd#

torch.histogramdd(input, bins, *, range=None, weight=None, density=False, out=None) -> (Tensor, Tensor[])#

计算张量中值的多维直方图。

将最内层维度大小为 N 的输入张量的元素解释为 N 维点的集合。将每个点映射到一组 N 维箱中,并返回每个箱中的点数(或总权重)。

input 必须是至少二维的张量。如果 input 的形状为 (M, N),则其 M 行中的每一行定义了 N 维空间中的一个点。如果 input 有三个或更多维度,则除最后一个维度外,所有维度都将被展平。

每个维度独立地关联其自身严格递增的箱边界序列。箱边界可以通过传递一维张量序列来显式指定。或者,可以通过传递指定每个维度中等宽度箱数量的整数序列来自动构建箱边界。

对于 input 中的每个 N 维点
  • 其每个坐标独立地在其维度对应的箱边界中进行分箱

    与之对应的维度

  • 通过组合分箱结果来识别点所属的 N 维箱(如果存在)

    该点落入的箱

  • 如果点落入某个箱,则该箱的计数(或总权重)会增加

  • 未落入任何箱的点不会计入输出

bins 可以是 N 个一维张量的序列、N 个整数的序列,或者一个整数。

如果 bins 是 N 个一维张量的序列,则它显式指定了 N 个箱边界序列。每个一维张量应包含一个严格递增的序列,至少有一个元素。包含 K 个箱边界的序列定义了 K-1 个箱,显式指定了所有箱的左边界和右边界。每个箱的左边界都是排他的。只有最右侧的箱包含其右边界。

如果 bins 是 N 个整数的序列,则它指定了每个维度中等宽度的箱的数量。默认情况下,每个维度中的最左侧和最右侧箱边界由输入张量在相应维度中的最小值和最大值确定。range 参数可用于手动指定每个维度中的最左侧和最右侧箱边界。

如果 bins 是一个整数,则它指定了所有维度中等宽度的箱的数量。

注意

另请参阅 torch.histogram(),它专门用于计算一维直方图。虽然 torch.histogramdd() 根据 input 的形状推断其箱和分箱值的维度,但 torch.histogram() 接受并展平了任何形状的 input

参数
  • input (Tensor) – 输入张量。

  • bins – Tensor[]、int[] 或 int。如果是 Tensor[],则定义箱边界的序列。如果是 int[],则定义每个维度中等宽度的箱数量。如果是 int,则定义所有维度中等宽度的箱数量。

关键字参数
  • range (float 的序列) – 定义每个维度中的最左侧和最右侧箱边界。

  • weight (Tensor) – 默认情况下,input 中的每个值权重为 1。如果传递了权重张量,则 input 中的每个 N 维坐标会将其关联的权重计入其箱的结果中。权重张量的形状应与 input 张量排除其最内层维度 N 的形状相同。

  • density (bool) – 如果为 False(默认值),则结果将包含每个箱中的计数(或总权重)。如果为 True,则每个计数(权重)除以总计数(总权重),然后除以其关联箱的体积。

返回

包含直方图值的 N 维张量。bin_edges(Tensor[]): 包含箱边界的 N 个一维张量的序列。

返回类型

hist (Tensor)

示例

>>> torch.histogramdd(torch.tensor([[0., 1.], [1., 0.], [2., 0.], [2., 2.]]), bins=[3, 3],
...                   weight=torch.tensor([1., 2., 4., 8.]))
    torch.return_types.histogramdd(
        hist=tensor([[0., 1., 0.],
                     [2., 0., 0.],
                     [4., 0., 8.]]),
        bin_edges=(tensor([0.0000, 0.6667, 1.3333, 2.0000]),
                   tensor([0.0000, 0.6667, 1.3333, 2.0000])))

>>> torch.histogramdd(torch.tensor([[0., 0.], [1., 1.], [2., 2.]]), bins=[2, 2],
...                   range=[0., 1., 0., 1.], density=True)
    torch.return_types.histogramdd(
       hist=tensor([[2., 0.],
                    [0., 2.]]),
       bin_edges=(tensor([0.0000, 0.5000, 1.0000]),
                  tensor([0.0000, 0.5000, 1.0000])))