如何从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)
我有一个矩阵,来自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)