NumPy - 统计函数
NumPy - 统计函数
Section titled “NumPy - 统计函数”NumPy 提供了一套函数,用于对数组数据执行常见的统计计算。这些函数可以作用于整个数组,也可以沿多维数组的指定轴(axis)进行操作。
在使用多维数组进行许多统计计算时,一个关键参数是 axis。它指定了计算应沿哪个轴进行:
axis=0: 沿行方向操作(折叠行,结果是每列的值)。axis=1: 沿列方向操作(折叠列,结果是每行的值)。axis=None(默认): 对展平后的数组(所有元素)进行操作。
许多统计函数也可以直接作为 ndarray 对象的方法使用(例如,a.min(),a.mean(axis=0))。
最小值和最大值(numpy.amin,numpy.amax,numpy.ptp)
Section titled “最小值和最大值(numpy.amin,numpy.amax,numpy.ptp)”numpy.amin()或ndarray.min(): 查找最小值。numpy.amax()或ndarray.max(): 查找最大值。numpy.ptp(): 计算范围(峰峰值 = max - min)。
示例:最小值、最大值和范围
Section titled “示例:最小值、最大值和范围”import numpy as np
a = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])
print(f"Our array:\n{a}\n")
# Overall min/max/rangeprint(f"Overall minimum (np.amin): {np.amin(a)}")print(f"Overall maximum (a.max()): {a.max()}")print(f"Overall range (np.ptp): {np.ptp(a)}\n")
# Operations along axesprint(f"Minimum along axis 0 (columns): {np.amin(a, axis=0)}")print(f"Maximum along axis 1 (rows): {np.amax(a, axis=1)}")print(f"Range along axis 0 (columns): {np.ptp(a, axis=0)}")print(f"Range along axis 1 (rows): {np.ptp(a, axis=1)}")输出:
Our array:[[3 7 5] [8 4 3] [2 4 9]]
Overall minimum (np.amin): 2Overall maximum (a.max()): 9Overall range (np.ptp): 7
Minimum along axis 0 (columns): [2 4 3]Maximum along axis 1 (rows): [7 8 9]Range along axis 0 (columns): [6 3 6]Range along axis 1 (rows): [4 5 7]百分位数和中位数(numpy.percentile,numpy.median)
Section titled “百分位数和中位数(numpy.percentile,numpy.median)”numpy.percentile(a, q, axis=None, ...): 计算数据的第 q 个百分位数。q必须介于 0 到 100 之间。numpy.median(a, axis=None, ...): 计算中位数(第 50 个百分位数)。
百分位数表示低于该值的观测值占总数给定百分比的值。中位数将数据分为较低的半部分和较高的半部分。
示例:百分位数和中位数
Section titled “示例:百分位数和中位数”import numpy as np
a = np.array([[30, 40, 70], [80, 20, 10], [50, 90, 60]])
print(f"Our array:\n{a}\n")
# Median (50th percentile) overallprint(f"Overall median: {np.median(a)}")# Also: np.percentile(a, 50)
# 25th percentile (first quartile) along columnsprint(f"25th percentile (axis=0): {np.percentile(a, 25, axis=0)}")
# Median along rowsprint(f"Median (axis=1): {np.median(a, axis=1)}")输出:
Our array:[[30 40 70] [80 20 10] [50 90 60]]
Overall median: 50.025th percentile (axis=0): [40. 30. 35.]Median (axis=1): [40. 20. 60.]均值和平均值(numpy.mean,numpy.average)
Section titled “均值和平均值(numpy.mean,numpy.average)”numpy.mean()或ndarray.mean(): 计算算术平均值(平均值)。numpy.average(): 计算加权平均值。如果未提供权重,则等同于mean。
示例:均值和加权平均值
Section titled “示例:均值和加权平均值”import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])print(f"Our array (a):\n{a}\n")
# Calculate the meanprint(f"Overall mean: {np.mean(a)}")print(f"Mean along axis 0 (columns): {a.mean(axis=0)}")print(f"Mean along axis 1 (rows): {a.mean(axis=1)}\n")
# Calculate weighted average along rowsweights = np.array([1, 2, 3]) # Weights for columns# For row 0: (1*1 + 2*2 + 3*3) / (1+2+3) = 14 / 6 = 2.333# For row 1: (1*4 + 2*5 + 3*6) / (1+2+3) = 32 / 6 = 5.333print(f"Weights: {weights}")print(f"Weighted average (axis=1): {np.average(a, axis=1, weights=weights)}")
# Average can also return sum of weightsavg, sum_weights = np.average(a, axis=1, weights=weights, returned=True)print(f"Weighted avg (returned=True): {avg}")print(f"Sum of weights (returned=True): {sum_weights}")输出:
Our array (a):[[1 2 3] [4 5 6]]
Overall mean: 3.5Mean along axis 0 (columns): [2.5 3.5 4.5]Mean along axis 1 (rows): [2. 5.]
Weights: [1 2 3]Weighted average (axis=1): [2.33333333 5.33333333]Weighted avg (returned=True): [2.33333333 5.33333333]Sum of weights (returned=True): [6. 6.]方差和标准差(numpy.var,numpy.std)
Section titled “方差和标准差(numpy.var,numpy.std)”numpy.var()或ndarray.var(): 计算方差。numpy.std()或ndarray.std(): 计算标准差。
方差衡量数据与均值的平均平方偏差。标准差是方差的平方根,提供了与数据具有相同单位的离散度度量。
重要参数:ddof (Delta Degrees of Freedom,自由度差)。默认情况下,ddof=0,计算的是总体方差/标准差。对于样本方差/标准差(除以 N-1 而不是 N),请设置 ddof=1。
示例:方差和标准差
Section titled “示例:方差和标准差”import numpy as np
data = np.array([1, 2, 3, 4, 5])print(f"Data: {data}\n")
# Population variance (ddof=0, default)var_pop = np.var(data)std_pop = np.std(data)print(f"Population Variance (ddof=0): {var_pop}")print(f"Population Std Dev (ddof=0): {std_pop}\n")
# Sample variance (ddof=1)var_sample = np.var(data, ddof=1)std_sample = np.std(data, ddof=1)print(f"Sample Variance (ddof=1): {var_sample}")print(f"Sample Std Dev (ddof=1): {std_sample}")输出:
Data: [1 2 3 4 5]
Population Variance (ddof=0): 2.0Population Std Dev (ddof=0): 1.4142135623730951
Sample Variance (ddof=1): 2.5Sample Std Dev (ddof=1): 1.5811388300841898应用:统计函数对于描述性数据分析、理解数据分布、机器学习中的特征工程以及质量控制至关重要。
在 NumPy 统计文档 中查找更多函数和详细信息。