如何从pytorch中的张量中使矩阵的所有行和为1

How can I make all rows of matrix sum 1 from tensor in pytorch

我有一个矩阵,来自Cora

它的大小是[2708,1433]

对于任何行,元素为 1 或 0。我想通过除以行的总和使“任何行的元素总和为 1”。

我怎样才能做到?起初我以为我可以通过 'for' 和 'append' 命令来完成。

有没有更简单的方法?

xs = xs / xs.sum(dim=-1).unsqueeze(-1)

如果 xs 是你的张量,xs.sum(dim=-1) 是列索引的总和(即形状为 (2708,) 的张量。通过解压它,你将它变成一个矩阵形状 (2708, 1) 然后你可以 broadcast 反对 xs。除法的结果 是一个矩阵,所有行总和为 1:

xs.sum(dim=1)
assert torch.allclose(torch.ones(xs.shape[0], dtype=float), xs.sum(dim=1))

ps:如果 xs 是 1 和 0,您可能需要先将其转换为 float

xs = xs.to(float)