火炬总和沿轴线的张量

Abh*_*tia 23 python sum torch pytorch tensor

ipdb> outputs.size()
torch.Size([10, 100])
ipdb> print sum(outputs,0).size(),sum(outputs,1).size(),sum(outputs,2).size()
(100L,) (100L,) (100L,)
Run Code Online (Sandbox Code Playgroud)

如何对列进行求和?

mex*_*mex 45

最简单和最好的解决方案是使用torch.sum().

总结张量的所有元素:

torch.sum(outputs) # gives back a scalar
Run Code Online (Sandbox Code Playgroud)

要汇总所有行(即每列):

torch.sum(outputs, dim=0) # size = [1, ncol]
Run Code Online (Sandbox Code Playgroud)

总结所有列(即每行):

torch.sum(outputs, dim=1) # size = [nrow, 1]
Run Code Online (Sandbox Code Playgroud)


kma*_*o23 11

或者,对于二维张量,您可以使用tensor.sum(axis)whereaxis指示0和1分别对行和列求和。

In [210]: X
Out[210]: 
tensor([[  1,  -3,   0,  10],
        [  9,   3,   2,  10],
        [  0,   3, -12,  32]])

In [211]: X.sum(1)
Out[211]: tensor([ 8, 24, 23])

In [212]: X.sum(0)
Out[212]: tensor([ 10,   3, -10,  52])
Run Code Online (Sandbox Code Playgroud)

从上面的输出我们可以看出,在这两种情况下,输出都是一维张量。另一方面,如果您也希望在输出中保留原始张量的维度,那么您已将布尔 kwargkeepdim设置True为:

In [217]: X.sum(0, keepdim=True)
Out[217]: tensor([[ 10,   3, -10,  52]])

In [218]: X.sum(1, keepdim=True)
Out[218]: 
tensor([[ 8],
        [24],
        [23]])
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是一个很好的答案。这个暗淡的变量乍一看似乎非常违反直觉 (2认同)