用零替换所有非零值,用特定值替换所有零值
Replace all nonzero values by zero and all zero values by a specific value
我有一个 3d 张量,其中包含一些零值和非零值。我想将所有非零值替换为零,将零值替换为特定值。我该怎么做?
使用 numpy 的方式大致相同,如下所示:
tensor[tensor!=0] = 0
为了替换零和非零,您可以将它们链接在一起。一定要使用张量的副本,因为它们会被修改:
def custom_replace(tensor, on_zero, on_non_zero):
# we create a copy of the original tensor,
# because of the way we are replacing them.
res = tensor.clone()
res[tensor==0] = on_zero
res[tensor!=0] = on_non_zero
return res
然后像这样使用它:
>>>z
(0 ,.,.) =
0 1
1 3
(1 ,.,.) =
0 1
1 0
[torch.LongTensor of size 2x2x2]
>>>out = custom_replace(z, on_zero=5, on_non_zero=0)
>>>out
(0 ,.,.) =
5 0
0 0
(1 ,.,.) =
5 0
0 5
[torch.LongTensor of size 2x2x2]
使用
torch.where(<your_tensor> != 0, <tensor with zeroz>, <tensor with the value>)
示例:
>>> x = torch.randn(3, 2)
>>> y = torch.ones(3, 2)
>>> x
tensor([[-0.4620, 0.3139],
[ 0.3898, -0.7197],
[ 0.0478, -0.1657]])
>>> torch.where(x > 0, x, y)
Tensor([[ 1.0000, 0.3139],
[ 0.3898, 1.0000],
[ 0.0478, 1.0000]])
查看更多信息:https://pytorch.org/docs/stable/generated/torch.where.html
这可以在不克隆张量和使用零值和非零值索引的情况下完成:
zero_indices = tensor == 0
non_zero_indices = tensor != 0
tensor[non_zero_indices] = 0
tensor[zero_indices] = value
我有一个 3d 张量,其中包含一些零值和非零值。我想将所有非零值替换为零,将零值替换为特定值。我该怎么做?
使用 numpy 的方式大致相同,如下所示:
tensor[tensor!=0] = 0
为了替换零和非零,您可以将它们链接在一起。一定要使用张量的副本,因为它们会被修改:
def custom_replace(tensor, on_zero, on_non_zero):
# we create a copy of the original tensor,
# because of the way we are replacing them.
res = tensor.clone()
res[tensor==0] = on_zero
res[tensor!=0] = on_non_zero
return res
然后像这样使用它:
>>>z
(0 ,.,.) =
0 1
1 3
(1 ,.,.) =
0 1
1 0
[torch.LongTensor of size 2x2x2]
>>>out = custom_replace(z, on_zero=5, on_non_zero=0)
>>>out
(0 ,.,.) =
5 0
0 0
(1 ,.,.) =
5 0
0 5
[torch.LongTensor of size 2x2x2]
使用
torch.where(<your_tensor> != 0, <tensor with zeroz>, <tensor with the value>)
示例:
>>> x = torch.randn(3, 2)
>>> y = torch.ones(3, 2)
>>> x
tensor([[-0.4620, 0.3139],
[ 0.3898, -0.7197],
[ 0.0478, -0.1657]])
>>> torch.where(x > 0, x, y)
Tensor([[ 1.0000, 0.3139],
[ 0.3898, 1.0000],
[ 0.0478, 1.0000]])
查看更多信息:https://pytorch.org/docs/stable/generated/torch.where.html
这可以在不克隆张量和使用零值和非零值索引的情况下完成:
zero_indices = tensor == 0
non_zero_indices = tensor != 0
tensor[non_zero_indices] = 0
tensor[zero_indices] = value