Метод index_fill_
Метод index_fill_ класса Tensor заполняет элементы тензора переданным значением по указанным индексам вдоль определённого измерения. В отличие от index_fill, метод с символом подчёркивания на конце изменяет исходный тензор на месте и не создаёт новый. Первым параметром метод принимает номер измерения, вторым - тензор с индексами, третьим - значение для заполнения.
Синтаксис
t.index_fill_(dim, index, value)
Пример
Давайте создадим одномерный тензор и заполним элементы с индексами 1 и 3 значением 99:
import torch
t = torch.tensor([10, 20, 30, 40, 50])
indices = torch.tensor([1, 3])
t.index_fill_(0, indices, 99)
print(t)
Результат выполнения кода:
tensor([10, 99, 30, 99, 50])
Пример
Заполним строки двумерного тензора по индексам 0 и 2 значением -1 вдоль измерения 0:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12],
])
indices = torch.tensor([0, 2])
t.index_fill_(0, indices, -1)
print(t)
Результат выполнения кода:
tensor([
[-1, -1, -1],
[4, 5, 6],
[-1, -1, -1],
[10, 11, 12],
])
Пример
Теперь заполним столбцы двумерного тензора по индексам 1 и 2 значением 0 вдоль измерения 1:
import torch
t = torch.tensor([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
])
indices = torch.tensor([1, 2])
t.index_fill_(1, indices, 0)
print(t)
Результат выполнения кода:
tensor([
[1, 0, 0, 4],
[5, 0, 0, 8],
[9, 0, 0, 12],
])
Пример
Метод поддерживает работу с многомерными тензорами. Заполним элементы по индексам вдоль измерения 1 в трёхмерном тензоре:
import torch
t = torch.tensor([
[
[1, 2],
[3, 4],
[5, 6],
],
[
[7, 8],
[9, 10],
[11, 12],
],
])
indices = torch.tensor([0, 2])
t.index_fill_(1, indices, 99)
print(t)
Результат выполнения кода:
tensor([
[
[99, 99],
[3, 4],
[99, 99],
],
[
[99, 99],
[9, 10],
[99, 99],
],
])
Смотрите также
-
метод
scatter_,
который записывает значения в тензор по индексам -
метод
masked_fill_,
который заполняет элементы по маске -
метод
index_select,
который выбирает элементы по индексам -
метод
fill_,
который заполняет все элементы тензора одним значением