Torche somme d'un tenseur le long d'un axe
ipdb> outputs.size()
torch.Size([10, 100])
ipdb> print sum(outputs,0).size(),sum(outputs,1).size(),sum(outputs,2).size()
(100L,) (100L,) (100L,)
Comment puis-je somme des colonnes de la place?
Vous devez vous connecter pour publier un commentaire.
La plus simple et la meilleure solution est d'utiliser
torch.sum()
.De la somme de tous les éléments d'un tenseur:
À somme sur toutes les lignes (c'est à dire pour chaque colonne):
À somme sur toutes les colonnes (c'est à dire pour chaque ligne):
Alternativement, vous pouvez utiliser
tensor.sum(axis)
oùaxis
indique0
et1
de sommation sur les lignes et les colonnes, respectivement, pour une 2D tenseur.Comme, on peut voir à partir du dessus de sorties, dans les deux cas, la sortie est un 1D tenseur. Si vous avez, d'autre part, désireux de conserver la dimension du tenseur d'origine à la sortie en tant que bien, alors vous avez défini le type boolean kwarg
keepdim
àTrue
comme dans:Si vous avez tenseur
my_tensor
, et vous souhaitez la somme de la deuxième dimension de la matrice (c'est l'un avec de l'index 1, qui est la colonne de dimension, si le tenseur est en 2 dimensions, comme la vôtre), l'utilisationtorch.sum(my_tensor,1)
ou, de manière équivalentemy_tensor.sum(1)
voir la documentation ici.Une chose qui n'est pas mentionné explicitement dans la documentation: vous pouvez la somme à travers le dernier de la matrice de dimension en utilisant
-1
(ou de la deuxième à la dernière dimension, avec-2
, etc.)Donc, dans votre exemple, vous pourriez utiliser:
outputs.sum(1)
outorch.sum(outputs,1)
, ou, de manière équivalente,outputs.sum(-1)
outorch.sum(outputs,-1)
. L'ensemble de ces donnerait le même résultat, une sortie tenseur de tailletorch.Size([10])
, et chaque entrée est la somme sur l'ensemble des lignes dans une colonne donnée du tenseuroutputs
.Pour illustrer avec un 3-dimensions du tenseur: