我有一个bsize x 50 x 50
大小的Pytorch张量,其中某些行完全用零填充:
[[0, 2, 0, ..., 0, 0, 0],
[2, 0, 2, ..., 0, 0, 0],
[0, 2, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]],
[[0, 2, 0, ..., 0, 0, 0],
[2, 0, 2, ..., 0, 0, 0],
[0, 2, 0, ..., 0, 0, 0],
我想在整个张量中用负值-100
替换用零填充的行。
预期张量-
[[0, 2, 0, ..., 0, 0, 0],
[2, 0, 2, ..., 0, 0, 0],
[0, 2, 0, ..., 0, 0, 0],
...,
[-100, -100, -100, ..., -100,-100, -100],
[-100, -100, -100, ..., -100,-100, -100],
[-100, -100, -100, ..., -100,-100, -100]],
[[0, 2, 0, ..., 0, 0, 0],
[2, 0, 2, ..., 0, 0, 0],
[0, 2, 0, ..., 0, 0, 0],
什么是避免在行形状上循环的最佳方法?
答案 0 :(得分:3)
假设x
是BxRxC
的张量(批,行和列),则可以执行以下操作:
x[(x == 0).all(dim=-1)] = -100
基本上:
x == 0
返回一个布尔张量(形状为BxRxC
),其中True
等于零; .all(dim=-1)
返回另一个布尔张量,现在的形状为BxR
,因为我们选择在最后一个维度(all
)中对{{1}做-1
},其中所有列为True
; True
分配到-100
位置。