Функция isnan
Функция isnan выполняет поэлементную проверку тензора на наличие значений NaN (Not a Number). Она возвращает новый тензор той же формы, что и исходный, содержащий логические значения True для элементов, которые являются NaN, и False для всех остальных элементов. Функция полезна при отладке вычислений, когда в результате математических операций могут возникать нечисловые значения, например, при делении нуля на ноль или при вычислении логарифма от отрицательного числа.
Синтаксис
torch.isnan(tensor)
Функция принимает один обязательный параметр:
-
tensor- входной тензор, элементы которого проверяются на NaN.
Пример
Давайте создадим тензор, содержащий значения NaN, и проверим его с помощью функции isnan:
import torch
t = torch.tensor([1.0, float('nan'), 3.0, float('nan'), 5.0])
res = torch.isnan(t)
print(res)
Результат выполнения кода:
tensor([False, True, False, True, False])
Пример
Функция isnan работает и с многомерными тензорами. Проверим двумерный тензор на наличие NaN:
import torch
t = torch.tensor([
[1.0, float('nan'), 3.0],
[float('nan'), 5.0, 6.0],
[7.0, 8.0, float('nan')]
])
res = torch.isnan(t)
print(res)
Результат выполнения кода:
tensor([
[False, True, False],
[ True, False, False],
[False, False, True]
])
Пример
Используем isnan для фильтрации и подсчёта количества NaN в тензоре:
import torch
t = torch.tensor([1.0, float('nan'), 3.0, 4.0, float('nan')])
is_nan_mask = torch.isnan(t)
nan_count = torch.sum(is_nan_mask)
print(f"Number of NaN values: {nan_count.item()}")
clean_tensor = t[~is_nan_mask]
print(clean_tensor)
Результат выполнения кода:
"Number of NaN values: 2"
tensor([1., 3., 4.])
Пример
Функция isnan также работает с тензорами, содержащими комплексные числа. Для комплексных чисел NaN считается, если NaN присутствует либо в действительной, либо в мнимой части:
import torch
import math
t = torch.tensor([
complex(1.0, 2.0),
complex(float('nan'), 3.0),
complex(4.0, float('nan'))
])
res = torch.isnan(t)
print(res)
Результат выполнения кода:
tensor([False, True, True])