Функция remainder
Функция remainder вычисляет остаток от деления для каждого элемента тензора. Первым параметром передаётся делимое (тензор), вторым - делитель (скаляр или тензор). Функция поддерживает вещание (broadcasting), что позволяет работать с тензорами разных размеров. Знак результата всегда совпадает со знаком делителя, а абсолютное значение результата всегда меньше абсолютного значения делителя. Это делает remainder удобной для операций, где важен положительный остаток, например, при работе с периодическими функциями или индексами.
Синтаксис
torch.remainder(input, other, *, out=None)
Где:
input- тензор-делимое;other- делитель (число или тензор);out(опционально) - выходной тензор.
Возвращает новый тензор с остатками от деления.
Пример
Вычислим остаток от деления элементов тензора на скаляр 3:
import torch
t = torch.tensor([7, 8, 9, 10, 11])
res = torch.remainder(t, 3)
print(res)
Результат выполнения кода:
tensor([1, 2, 0, 1, 2])
Как видно, остатки соответствуют делению каждого числа на 3.
Пример
Используем отрицательный делитель. Остаток будет отрицательным, так как знак результата следует за делителем:
import torch
t = torch.tensor([5, 6, 7, 8])
res = torch.remainder(t, -3)
print(res)
Результат выполнения кода:
tensor([-1, 0, -2, -1])
Обратите внимание, что результат отрицательный и по модулю меньше 3.
Пример
Вычислим остаток от деления двух тензоров поэлементно:
import torch
t1 = torch.tensor([10, 20, 30, 40, 50])
t2 = torch.tensor([3, 4, 7, 9, 11])
res = torch.remainder(t1, t2)
print(res)
Результат выполнения кода:
tensor([1, 0, 2, 4, 6])
Каждый элемент первого тензора делится на соответствующий элемент второго.
Пример
Используем вещание (broadcasting) для деления матрицы на скаляр:
import torch
t = torch.tensor([
[12, 15, 18],
[21, 24, 27],
])
res = torch.remainder(t, 5)
print(res)
Результат выполнения кода:
tensor([
[2, 0, 3],
[1, 4, 2],
])
Скаляр 5 применяется ко всем элементам матрицы.
Смотрите также
-
функцию
fmod,
которая вычисляет остаток, знак которого совпадает со знаком делимого -
функцию
div,
которая выполняет деление тензоров -
функцию
floor_divide,
которая выполняет деление с округлением вниз -
функцию
true_divide,
которая выполняет точное деление с плавающей точкой