是否有将 n 维张量与 n-1 维张量相除的函数

乘风 pytorch 538

原文标题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 方法来做到这一点。

原文链接:https://stackoverflow.com//questions/71429755/is-there-a-function-to-divide-a-n-dimensional-tensor-with-an-n-1-dimensional-ten

回复

我来回复
  • jakub的头像
    jakub 评论

    您可以扩展 N-1 维张量的维度,使其可与 N 维张量一起广播。

    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]]])
    
    2年前 0条评论