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)