В зависимости от вашего варианта использования, все, что работает через PyTorch, может быть выгодным (например, для сохранения всех вычислений на GPU).
Решение только для PyTorch будет следовать синтаксису numpy (то есть zeros[rows, raw_target] = 1.
):
import numpy as np
import torch
batch_size = 5
classes = 4
raw_target = torch.from_numpy(np.array([1, 0, 3, 2, 0]))
rows = torch.range(0, batch_size-1, dtype=torch.int64)
x = torch.zeros((batch_size, classes), dtype=torch.float64)
x[rows, raw_target] = 1.
print(x.detach())
# tensor([[ 0., 1., 0., 0.],
# [ 1., 0., 0., 0.],
# [ 0., 0., 0., 1.],
# [ 0., 0., 1., 0.],
# [ 1., 0., 0., 0.]], dtype=torch.float64)