Я знаю, как обновить тензор после индексации на его части, например:
import torch
b = torch.tensor([0, 1, 0, 1], dtype=torch.uint8)
b[b] = 2
b
# tensor([0, 2, 0, 2], dtype=torch.uint8)
, но есть ли способ, которым я могу обновить оригинальный тензор после индексации в нем дважды?Например,
i = 1
b = torch.tensor([0, 1, 0, 1], dtype=torch.uint8)
b[b][i] = 2
b
# tensor([0, 1, 0, 1], dtype=torch.uint8)
Мне бы хотелось, чтобы b
было tensor([0, 1, 0, 2])
в конце.Есть ли способ сделать это?
Я знаю, что я могу сделать
masked = b[b]
masked[i] = 2
b[b] = masked
b
# tensor([0, 1, 0, 2], dtype=torch.uint8)
, но есть ли лучший способ?Кажется, что это должно быть неэффективно;если masked
очень большой, я обновляю много мест в b
, когда я действительно изменил только одну.
(Если другой подход, чем индексирование дважды, будет работать лучше, общая проблема, которую яесть, как изменить значение в исходном тензоре в i
-ом местоположении маскированной версии этого тензора.)