Метод long
Метод long преобразует тензор к типу данных torch.int64 (длинное целое со знаком).
Этот метод полезен, когда требуется явное приведение типа для операций,
ожидающих целочисленные значения, например, для индексации или работы с функциями,
требующими целочисленные тензоры.
Метод создает новый тензор с указанным типом, не изменяя исходный.
Синтаксис
t.long()
Метод не принимает параметров и возвращает новый тензор с типом torch.int64.
Пример
Давайте создадим тензор с вещественными числами и преобразуем его в целочисленный тип:
import torch
t = torch.tensor([1.2, 2.8, 3.5, 4.1])
res = t.long()
print(res)
Результат выполнения кода:
tensor([1, 2, 3, 4])
Как видно из примера, дробная часть отбрасывается (приведение к целому выполняется путем усечения).
Пример
Давайте создадим тензор с типом данных float32 и явно преобразуем его в int64:
import torch
t = torch.tensor([1, 2, 3], dtype=torch.float32)
print("Исходный тип:", t.dtype)
res = t.long()
print("Новый тип:", res.dtype)
print(res)
Результат выполнения кода:
"Исходный тип: torch.float32"
"Новый тип: torch.int64"
tensor([1, 2, 3])
Метод long всегда возвращает тензор с типом torch.int64,
независимо от исходного типа данных.
Пример
Рассмотрим использование метода long для индексации другого тензора.
Индексы должны быть целочисленными:
import torch
# Исходный тензор для индексации
data = torch.tensor([10, 20, 30, 40, 50])
# Тензор с индексами (вещественные числа)
indices = torch.tensor([1.0, 3.0, 0.0])
# Преобразуем индексы в целочисленный тип
int_indices = indices.long()
res = data[int_indices]
print(res)
Результат выполнения кода:
tensor([20, 40, 10])
Без преобразования типов индексация вещественным тензором вызовет ошибку.
Метод long решает эту проблему, обеспечивая корректную работу с индексами.