Python 蒙面的你分散了,但是划船?
假设面具如下所示:Python 蒙面的你分散了,但是划船?,python,pytorch,Python,Pytorch,假设面具如下所示: mask = torch.tensor([ [True, True, False, True, False], [True, False, True, True, True ], ]) 我想用每行中的顺序值分别对True值进行编号。我不在乎False点中有什么,所以0为简单起见。因此,期望的结果是 tensor([[0, 1, 0, 2, 0], # 0 1 _ 2 _ [0, 0, 1, 2, 3]]) # 0 _ 1 2 3
mask = torch.tensor([
[True, True, False, True, False],
[True, False, True, True, True ],
])
我想用每行中的顺序值分别对True
值进行编号。我不在乎False
点中有什么,所以0
为简单起见。因此,期望的结果是
tensor([[0, 1, 0, 2, 0], # 0 1 _ 2 _
[0, 0, 1, 2, 3]]) # 0 _ 1 2 3
我希望这能奏效:
replacements = torch.arange(mask.size(1)).expand(mask.size())
target = torch.zeros(mask.size(), dtype=int)
target.masked_scatter(mask, replacements)
不幸的是,masked_scatter
忽略了替换的形状,因此此代码导致:
tensor([[0, 1, 0, 2, 0], # 0 1 _ 2 _
[3, 0, 4, 0, 1]]) # 3 _ 4 0 1
我需要做什么呢?我会尝试使用:
torch.cumsum(mask,dim=1)-1)*mask
完整的例子
导入火炬
掩模=火炬张量([
[真,真,假,真,假],
[真,假,真,真,真],
])
结果=火炬积温(遮罩,尺寸=1)-1)*遮罩
打印(结果)
这将打印:
tensor([[0, 1, 0, 2, 0],
[0, 0, 1, 2, 3]])
哦,太好了,谢谢。我甚至不需要
*掩码
(正如我所说的,我不关心False
slot:P)