Константа nan
Константа nan (Not a Number) в NumPy представляет специальное числовое значение, которое используется для обозначения результатов операций, не имеющих математического смысла. К таким операциям относятся деление нуля на ноль, извлечение корня из отрицательного числа или логарифм отрицательного числа. Константа доступна как np.nan и является экземпляром типа float.
Важно отметить, что nan не равен самому себе, что является отличительной особенностью этого значения. Для проверки наличия nan в массивах следует использовать функцию np.isnan, а не оператор сравнения.
Синтаксис
np.nan
Пример
Давайте создадим массив, содержащий значение nan, и выполним с ним арифметические операции:
import numpy as np
arr = np.array([1, 2, np.nan, 4, 5])
print(arr)
Результат выполнения кода:
[ 1. 2. nan 4. 5.]
Пример
Выполним математические операции с числом и nan, чтобы увидеть, как распространяется это значение:
import numpy as np
res = np.nan + 5
print(res)
res = np.nan * 10
print(res)
Результат выполнения кода:
nan
nan
Пример
Проверим, что nan не равен самому себе, и сравним результат с использованием функции np.isnan:
import numpy as np
print(np.nan == np.nan)
print(np.isnan(np.nan))
Результат выполнения кода:
False
True
Пример
Используем nan для обработки пропущенных значений в массиве, заменяя их на среднее значение:
import numpy as np
arr = np.array([1, 2, np.nan, 4, 5])
print("Original array:", arr)
mean_val = np.nanmean(arr)
print("Mean value:", mean_val)
arr_filled = np.where(np.isnan(arr), mean_val, arr)
print("Filled array:", arr_filled)
Результат выполнения кода:
Original array: [ 1. 2. nan 4. 5.]
Mean value: 3.0
Filled array: [1. 2. 3. 4. 5.]
Пример
Создадим массив и выполним операции, которые могут привести к появлению nan:
import numpy as np
arr = np.array([-1, 0, 1, 4])
print("Original array:", arr)
sqrt_arr = np.sqrt(arr)
print("Square root:", sqrt_arr)
log_arr = np.log(arr)
print("Logarithm:", log_arr)
div_arr = np.divide(arr, 0)
print("Division by zero:", div_arr)
Результат выполнения кода:
Original array: [-1 0 1 4]
Square root: [ nan 0. 1. 2.]
Logarithm: [ nan -inf 0. 1.38629436]
Division by zero: [ -inf nan inf inf]
В этом примере видно, что извлечение корня из отрицательного числа дает nan, а деление нуля на ноль также приводит к nan. Деление положительного числа на ноль дает inf, а логарифм нуля дает -inf.