NumPy nanstd() 函数
NumPy nanstd() 函数计算数组中元素的标准差,同时忽略 NaN 值。它测量分布的散布或离散度,将 NaN 值视为缺失数据。默认情况下,标准差是在展平数组上计算的,但也可以沿指定轴计算。
如果切片仅包含 NaN 值或自由度为零,则该函数返回 NaN 并引发 RuntimeWarning。
在统计学中,标准差是方差的平方根。公式为 std = sqrt(sum((x_i - mean)^2) / N),其中 x_i 表示每个数据点,mean 表示数据的平均值,N 表示有效(非 NaN)数据点的数量。
对于一维数组,标准差是针对除 NaN 值之外的所有元素计算的。对于多维数组,标准差沿指定轴计算,忽略 NaN 值。
语法
以下是 NumPy nanstd() 函数的语法 -
numpy.nanstd(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>, where=<no value>, mean=<no value>, Correction=<no value>)
参数
以下是 NumPy nanstd() 函数的参数 -
- a:输入数组或对象,可以转换为数组。它可以是 NumPy 数组、列表或标量值。
- axis(可选):计算标准差的轴。默认值为 None,表示标准差将在整个数组上计算。
- dtype(可选):用于计算标准差的数据类型。如果为 None,则从输入数组推断得出。
- out(可选):存储结果的位置。如果提供,则必须与预期输出具有相同的形状。
- ddof(可选):自由度增量。计算中使用的除数为 N - ddof,其中 N 是非 NaN 元素的数量。默认值为 0。
- keepdims(可选):如果为 True,则缩小后的维度在输出中保留为 1 的尺寸。默认值为 False。
- where(可选):要包含在标准差中的元素
- mean(可选):提供平均值以防止重复计算。平均值应具有与 keepdims=True 时计算的形状相同的形状。计算平均值的轴应与调用此 std 函数时使用的轴相同。
- correction(可选):此函数计算数组中元素的标准差,衡量数据围绕平均值的离散度或散布程度,并可选择沿指定轴计算、应用自由度("ddof")以及保留维度。
返回值
此函数返回输入数组的标准差,同时忽略 NaN 值。如果输入是一维的,则结果为标量;如果输入是多维的,则结果为数组。
示例
以下是使用 NumPy nanstd() 函数计算数组标准差并忽略 NaN 值的基本示例 -
import numpy as np # 输入包含 NaN 值的数组 x = np.array([1, 2, np.nan, 4, 5]) # 应用 nanstd result = np.nanstd(x) print("标准差结果(忽略 NaN):", result)
输出
以下是上述代码的输出 -
标准差结果(忽略 NaN):1.5811388300841898
示例:指定轴
nanstd() 函数可以计算多维数组沿特定轴的标准差,同时忽略 NaN 值。在以下示例中,我们计算了二维数组沿轴 0(列)和轴 1(行)的标准差 -
import numpy as np # 包含 NaN 值的二维数组 x = np.array([[1, 2, np.nan], [4, 5, 6], [7, 8, np.nan]]) # 沿轴 0(列)应用 nanstd result_axis0 = np.nanstd(x, axis=0) # 沿轴 1(行)应用 nanstd result_axis1 = np.nanstd(x, axis=1) print("沿轴 0 的标准差(忽略 NaN):", result_axis0) print("沿轴 1 的标准差(忽略NaN):", result_axis1)
输出
以下是上述代码的输出 −
沿轴 0 的标准差(忽略 NaN):[2.44948974 2.44948974 0. ] 沿轴 1 的标准差(忽略 NaN):[0.5 0.81649658 0.5 ]
示例:'ddof' 参数的用法
ddof(自由度增量) 参数允许我们调整计算的自由度。默认情况下,ddof=0,但我们可以将其设置为其他值,以更改计算中使用的除数。在以下示例中,我们计算了 ddof=1 时的标准差,同时忽略了 NaN 值 -
import numpy as np # 输入包含 NaN 值的数组 x = np.array([1, 2, np.nan, 4, 5]) # 应用 nanstd 函数,同时设置 ddof=1 result = np.nanstd(x, ddof=1) print("ddof=1 时的标准差(忽略 NaN):", result)
输出
以下是上述代码的输出 -
ddof=1 时的标准差(忽略 NaN): 1.8708286933869707
示例:处理三维数组
在以下示例中,我们演示了如何在三维数组上使用 nanstd() 函数,计算沿各个轴的标准差,同时忽略 `NaN` 值 -
import numpy as np # 包含 NaN 值的三维数组 x = np.array([ [[1, np.nan], [3, 4]], [[5, 6], [np.nan, 8]], [[9, 10], [11, np.nan]] ]) # 沿轴 0 应用 nanstd result_axis0 = np.nanstd(x, axis=0) # 沿轴 1 应用 nanstd result_axis1 = np.nanstd(x, axis=1) print("沿轴 0 的标准差(忽略 NaN): ", result_axis0) print("沿轴 1 的标准差(忽略 NaN): ", result_axis1)
输出
以下是上述代码的输出 -
沿轴 0 的标准差(忽略 NaN): [[3.26598632 2. ] [4. 2. ]] 沿轴 1 的标准差(忽略 NaN): [[1. 0.] [0. 1.] [1. 0.]]
numpy_statistical_functions.html