火炬总和沿轴线的张量

时间:2017-06-27 22:02:35

标签: python sum pytorch torch 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,)

如何对列进行求和?

3 个答案:

答案 0 :(得分:27)

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

总结张量的所有元素:

torch.sum(outputs) # gives back a scalar

汇总所有行(即每列):

torch.sum(outputs, dim=0) # size = [1, ncol]

汇总所有列(即每行):

torch.sum(outputs, dim=1) # size = [nrow, 1]

答案 1 :(得分:1)

或者,您可以使用tensor.sum(axis),其中axis表示01分别用于二维张量的行和列求和。

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])

从上面的输出中我们可以看到,在两种情况下,输出都是一维张量。另一方面,如果您也希望在输出中保留原始张量的尺寸,则可以将布尔kwarg keepdim设置为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]])

答案 2 :(得分:0)

如果您有张量my_tensor,并且希望对第二个数组维求和(即,张量为2维,则索引为1,即列维)是),请使用torch.sum(my_tensor,1)或等效的my_tensor.sum(1)参见documentation here

文档中未明确提及的一件事是:您可以使用-1(或倒数第二个维度,使用{{ 1}}等)

因此,在您的示例中,您可以使用:-2outputs.sum(1),或者等效地使用torch.sum(outputs,1)outputs.sum(-1)。所有这些都会产生相同的结果,即输出张量为torch.sum(outputs,-1)的张量,每个条目都是张量torch.Size([10])的给定列中所有行的总和。

使用3维张量进行说明:

outputs