是否有一个函数可以将一个n维张量除以一个n-1维张量
Is there a function to divide a n dimensional tensor with an n-1 dimensional tensor
我不确定如何正确表达这个问题,因此我将展示一些示例来描述所需的行为。
我希望以这种特定方式划分张量。
将向量除以 1 个标量,例如 [1, 2, 3, 4, 5]
除以 2 = [0.5, 1, 1.5, 2, 2.5]
将矩阵除以 2 个标量,例如 [[1, 2, 3], [2, 3, 4]]
除以 [2, 4]
= [[0.5, 1, 1.5], [0.5, 0.75, 1]]
将一个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]]]
将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]]])
我不确定如何正确表达这个问题,因此我将展示一些示例来描述所需的行为。
我希望以这种特定方式划分张量。
将向量除以 1 个标量,例如
[1, 2, 3, 4, 5]
除以 2 =[0.5, 1, 1.5, 2, 2.5]
将矩阵除以 2 个标量,例如
[[1, 2, 3], [2, 3, 4]]
除以[2, 4]
=[[0.5, 1, 1.5], [0.5, 0.75, 1]]
将一个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]]]
将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]]])