替换向量中的值 (PyTorch)
Substitute values in a vector (PyTorch)
我有一个包含 N 个唯一目标标签的张量,从 [0,R] 中随机选择,其中 N
我的尝试:
我已经实现了以下代码片段,它按预期工作,但可能不是最出色的实现:
import torch
def my_transform(vec):
t_ = torch.unique(vec)
return torch.cat(list(map(lambda x: (t_ == x).nonzero(as_tuple=True)[0], vec)))
t = torch.Tensor([12, 6, 4, 5, 3, 12, 4])
print(my_transform(t))
您正在寻找searchsorted
import torch
t = torch.Tensor([12, 6, 4, 5, 3, 12, 4])
transformed = torch.searchsorted(t.unique(),t)
# tensor([4, 3, 1, 2, 0, 4, 1])
除了@lwohlhart的回答,我们还可以使用unique
的return_inverse
参数:
import torch
x = torch.tensor([12, 6, 4, 5, 3, 12, 4])
x.unique(return_inverse=True)
# (tensor([ 3, 4, 5, 6, 12]), tensor([4, 3, 1, 2, 0, 4, 1]))
我有一个包含 N 个唯一目标标签的张量,从 [0,R] 中随机选择,其中 N 我的尝试: 我已经实现了以下代码片段,它按预期工作,但可能不是最出色的实现:import torch
def my_transform(vec):
t_ = torch.unique(vec)
return torch.cat(list(map(lambda x: (t_ == x).nonzero(as_tuple=True)[0], vec)))
t = torch.Tensor([12, 6, 4, 5, 3, 12, 4])
print(my_transform(t))
您正在寻找searchsorted
import torch
t = torch.Tensor([12, 6, 4, 5, 3, 12, 4])
transformed = torch.searchsorted(t.unique(),t)
# tensor([4, 3, 1, 2, 0, 4, 1])
除了@lwohlhart的回答,我们还可以使用unique
的return_inverse
参数:
import torch
x = torch.tensor([12, 6, 4, 5, 3, 12, 4])
x.unique(return_inverse=True)
# (tensor([ 3, 4, 5, 6, 12]), tensor([4, 3, 1, 2, 0, 4, 1]))