2024-05-08 09:24:22 发布
网友
ipdb> outputs.size() torch.Size([10, 100]) ipdb> print sum(outputs,0).size(),sum(outputs,1).size(),sum(outputs,2).size() (100L,) (100L,) (100L,)
我该如何对这些列求和呢?
或者,可以使用tensor.sum(axis),其中axis分别表示0和1对二维张量的行和列求和。
tensor.sum(axis)
axis
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])
从上面的输出可以看出,在这两种情况下,输出都是一维张量。另一方面,如果您也希望在输出中保留原始张量的维数,那么您已经将布尔kwargkeepdim设置为True,如下所示:
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]])
如果有张量my_tensor,并且希望在第二个数组维度(即索引为1的数组维度,即列维度)上求和,如果张量是二维的,则使用torch.sum(my_tensor,1)或等效的my_tensor.sum(1)请参见documentation here。
my_tensor
torch.sum(my_tensor,1)
my_tensor.sum(1)
文档中没有明确提到的一件事是:您可以使用-1(或者使用-2等跨最后一个数组维度求和)
-1
-2
因此,在您的示例中,您可以使用:outputs.sum(1)或torch.sum(outputs,1),或者等效地使用outputs.sum(-1)或torch.sum(outputs,-1)。所有这些都会得到相同的结果,一个大小为torch.Size([10])的输出张量,每个条目都是张量outputs给定列中所有行的总和。
outputs.sum(1)
torch.sum(outputs,1)
outputs.sum(-1)
torch.sum(outputs,-1)
torch.Size([10])
outputs
用三维张量来说明:
In [1]: my_tensor = torch.arange(24).view(2, 3, 4) Out[1]: tensor([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) In [2]: my_tensor.sum(2) Out[2]: tensor([[ 6, 22, 38], [54, 70, 86]]) In [3]: my_tensor.sum(-1) Out[3]: tensor([[ 6, 22, 38], [54, 70, 86]])
最简单和最好的解决方案是使用torch.sum()。
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]
或者,可以使用
tensor.sum(axis)
,其中axis
分别表示0
和1
对二维张量的行和列求和。从上面的输出可以看出,在这两种情况下,输出都是一维张量。另一方面,如果您也希望在输出中保留原始张量的维数,那么您已经将布尔kwarg
keepdim
设置为True
,如下所示:如果有张量
my_tensor
,并且希望在第二个数组维度(即索引为1的数组维度,即列维度)上求和,如果张量是二维的,则使用torch.sum(my_tensor,1)
或等效的my_tensor.sum(1)
请参见documentation here。文档中没有明确提到的一件事是:您可以使用
-1
(或者使用-2
等跨最后一个数组维度求和)因此,在您的示例中,您可以使用:
outputs.sum(1)
或torch.sum(outputs,1)
,或者等效地使用outputs.sum(-1)
或torch.sum(outputs,-1)
。所有这些都会得到相同的结果,一个大小为torch.Size([10])
的输出张量,每个条目都是张量outputs
给定列中所有行的总和。用三维张量来说明:
最简单和最好的解决方案是使用
torch.sum()
。要对张量的所有元素求和:
对所有行(即每列)求和:
对所有列(即每行)求和:
相关问题 更多 >
编程相关推荐