Заполнение по маске в PyTorch
Метод masked_fill возвращает
новый тензор: в ячейках, где маска
истинна, записывают одно заданное
число, остальные значения копируют
из исходника.
Создадим таблицу и маску на угловых ячейках; результат сохраним отдельно и проверим, что исходник не изменился:
import torch
grid = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
corners = torch.tensor([[True, False], [False, True]])
filled = grid.masked_fill(corners, -1.0)
print(filled) # выведет tensor([[-1., 2.], [ 3., -1.]])
print(grid) # выведет tensor([[1., 2.], [3., 4.]])
Тот же приём удобен, когда маску строят из сравнения с порогом:
import torch
temps = torch.tensor([0.5, 2.0, -1.0, 3.0])
updated = temps.masked_fill(temps < 0, 0.0)
print(updated) # выведет tensor([0.5000, 2.0000, 0.0000, 3.0000])
Создайте ряд [5, 0, 7, 0, 9]
и замените нули числом -1;
выведите новый ряд, не меняя
исходный.
Создайте таблицу [[1, 2], [3, 4]]
и маску на ячейках с числами
1 и 4; запишите
в них 0 и выведите результат.
Создайте ряд оценок [8, 3, 9, 4]
и замените значения ниже 5
на 5; выведите итоговый ряд.