是否有一个函数可以将一个n维张量除以一个n-1维张量

Is there a function to divide a n dimensional tensor with an n-1 dimensional tensor

我不确定如何正确表达这个问题,因此我将展示一些示例来描述所需的行为。

我希望以这种特定方式划分张量。

  1. 将向量除以 1 个标量,例如 [1, 2, 3, 4, 5] 除以 2 = [0.5, 1, 1.5, 2, 2.5]

  2. 将矩阵除以 2 个标量,例如 [[1, 2, 3], [2, 3, 4]] 除以 [2, 4] = [[0.5, 1, 1.5], [0.5, 0.75, 1]]

  3. 将一个3维张量除以一个2维张量,例如[[[1, 2, 3], [2, 3, 4]], [[4,5,6], [7,8,9]], [[9,8,6], [1,2,3]]]除以[[1, 2], [3, 4], [5, 6]] = [[[1, 2, 3], [1, 1.5, 2]], [[4/3,5/3,2], [7/4,2,9/4]], [[9/5,8/5,6/5], [1/6,2/6,3/6]]]

  4. 将N维张量除以N-1维张量...

我正在寻找一种 pytorch 方法来做到这一点。

您可以将 N-1 维张量的维度扩展为 broadcastable 与 N-dimensional 张量。

tensor_a / tensor_b.unsqueeze(-1)

这可以概括,即使分母是标量。 -1 维度表示最后一个维度。这遵循 python 索引规则,其中 sequence[-1] 为您提供序列的最后一个元素。

a = torch.as_tensor([1, 2, 3, 4, 5])
b = torch.as_tensor(2)
a / b.unsqueeze(-1)
# tensor([0.5000, 1.0000, 1.5000, 2.0000, 2.5000])

a = torch.as_tensor([[1, 2, 3], [2, 3, 4]])
b = torch.as_tensor([2, 4])
a / b.unsqueeze(-1) 
# tensor([[0.5000, 1.0000, 1.5000],
#         [0.5000, 0.7500, 1.0000]])

a = torch.as_tensor([[[1, 2, 3], [2, 3, 4]], [[4,5,6], [7,8,9]], [[9,8,6], [1,2,3]]])
b = torch.as_tensor([[1, 2], [3, 4], [5, 6]])
a / b.unsqueeze(-1) 
# tensor([[[1.0000, 2.0000, 3.0000],
#          [1.0000, 1.5000, 2.0000]],
#
#         [[1.3333, 1.6667, 2.0000],
#          [1.7500, 2.0000, 2.2500]],
#
#         [[1.8000, 1.6000, 1.2000],
#         [0.1667, 0.3333, 0.5000]]])