Функция nanstd
Функция nanstd вычисляет стандартное отклонение
вдоль указанной оси, игнорируя значения NaN
(не число). Она полезна при работе с данными,
содержащими пропуски, так как позволяет получить
корректную статистическую оценку без необходимости
заполнять пропущенные значения.
Синтаксис
np.nanstd(a, axis=None, dtype=None, out=None, ddof=0, keepdims=False, *, where=True)
Основные параметры:
-
a- входной массив или объект, который можно преобразовать в массив; -
axis- ось, вдоль которой вычисляется отклонение (по умолчаниюNone- вычисляется по всему массиву); -
ddof- поправка степени свободы (по умолчанию0- стандартное отклонение по генеральной совокупности); -
keepdims- сохранять ли размерность (по умолчаниюFalse); -
where- условие для включения элементов в расчёт.
Пример с одномерным массивом
Давайте вычислим стандартное отклонение для одномерного массива с пропущенными значениями:
import numpy as np
arr = np.array([1.0, 2.0, np.nan, 4.0, 5.0])
res = np.nanstd(arr)
print(res)
Результат выполнения кода:
1.5811388300841898
При этом стандартное отклонение, вычисленное с помощью обычной
функции std, вернуло бы nan, так как в массиве
присутствует пропуск.
Пример с двумерным массивом
Рассмотрим вычисление стандартного отклонения по строкам и столбцам двумерного массива с пропусками:
import numpy as np
arr = np.array([
[1.0, 2.0, np.nan],
[4.0, 5.0, 6.0],
[np.nan, 8.0, 9.0]
])
# По всему массиву
res_all = np.nanstd(arr)
print(res_all)
# По строкам (axis=1)
res_rows = np.nanstd(arr, axis=1)
print(res_rows)
# По столбцам (axis=0)
res_cols = np.nanstd(arr, axis=0)
print(res_cols)
Результат выполнения кода:
2.9154759474226504
[0.5 0.81649658 0.5 ]
[1.5 2.44948974 1.5 ]
Пример с параметром ddof
Параметр ddof позволяет управлять степенью свободы.
При ddof=1 вычисляется несмещённое выборочное
стандартное отклонение:
import numpy as np
arr = np.array([1.0, 2.0, np.nan, 4.0, 5.0])
# Генеральное стандартное отклонение (ddof=0)
res_pop = np.nanstd(arr, ddof=0)
print(res_pop)
# Выборочное стандартное отклонение (ddof=1)
res_sample = np.nanstd(arr, ddof=1)
print(res_sample)
Результат выполнения кода:
1.5811388300841898
1.8257418583505538
Пример с параметром keepdims
Параметр keepdims сохраняет размерность
результата, что полезно при работе с широковещанием:
import numpy as np
arr = np.array([
[1.0, 2.0, np.nan],
[4.0, 5.0, 6.0]
])
# Без сохранения размерности
res_no_keep = np.nanstd(arr, axis=1)
print(res_no_keep.shape)
# С сохранением размерности
res_keep = np.nanstd(arr, axis=1, keepdims=True)
print(res_keep.shape)
print(res_keep)
Результат выполнения кода:
(2,)
(2, 1)
[[0.5]
[0.81649658]]
Пример с параметром where
Параметр where позволяет выбирать элементы для расчёта
по определённому условию:
import numpy as np
arr = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
mask = np.array([True, True, False, True, True])
# Вычисляем отклонение только для элементов, где mask=True
res = np.nanstd(arr, where=mask)
print(res)
Результат выполнения кода:
1.5