中位数,又称 “中值” 。它指的是按从小到大排序之后,处于中间位置的数。所谓的顺序排序,指的是从小到大排序。
- 如果一组数的个数是奇数,比如有 5 个数:23、45、35、22、28,那么排序后是:22、23、28、35、45,此时中位数就是 28。
- 如果一组数的个数是偶数,比如有 6 个数:23、45、35、22、28、32,那么排序后是:22、23、28、32、35、45,此时中位数就是 ( 28 + 32 ) ÷ 2 = 30。
对于中位数来说,它具有以下性质:
- 中位数不受极端值的影响(相较于平均值,中位数更加稳健)。
- 中位数将数据分为两部分,一部分大于中位数,一部分小于中位数。
NumPy 求中位数函数
在 NumPy 中,我们可以使用 median() 函数来计算数组的中位数。
语法:
numpy.median(
arr,
axis=None,
dtype=None,
out=None,
overwrite_input=False,
keepdims=False,
)说明:
median() 函数接收以下参数。
arr(必选):是一个数组。axis(可选,默认:None):表示沿着哪个轴计算中位数。None:计算整个数组的中位数。axis=0:计算每一列的中位数(纵向)。axis=1:计算每一行的中位数(横向)。
dtype(可选,默认:None): 用于指定输出数组的数据类型。一般不需要填写,NumPy 会自动选择合适的类型(比如整数会提升为 float64)。out(可选,默认:None):把计算结果写入到现有数组里,而不是新建一个数组,这样可以节省内存。overwrite_input(可选,默认:False):是否允许在计算中直接排序修改原数组(节省内存,但会改变原数组内容)。keepdims(可选,默认:False):是否保留原数组的维度(维度大小变成 1)。
NumPy 求中位数示例
接下来,我们通过几个简单的例子来讲解 NumPy 是如何求中位数的。
示例 1:NumPy 求一维数组中位数
import numpy as np
arr = np.array([3, 1, 4, 1])
result = np.median(arr)
print(result)运行结果如下。
2.0分析:
对 arr 排序后的结果为 [1, 1, 3, 4],因此中位数为:(1 + 3) / 2 = 2.0(自动转换为浮点类型)。
示例 2:NumPy 求多维数组中位数
import numpy as np
arr = np.array([[5, 2, 9], [1, 7, 3], [4, 8, 6]])
# 全局中位数
print('全局中位数:', np.median(arr))
# 按列计算中位数(axis=0)
print('沿 0 轴中位数:', np.median(arr, axis=0))
# 按行计算中位数(axis=1)
print('沿 1 轴中位数:', np.median(arr, axis=1))运行结果如下。
全局中位数:5.0
沿 0 轴中位数:[4. 7. 6.]
沿 1 轴中位数:[5. 3. 6.]分析:
对 arr 排序后的结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9],因此全局中位数为:5.0(自动转换为浮点类型)。
np.median(arr, axis=0):表示按列计算中位数,即每列排序后再取中位数,其结果为:[4. 7. 6.]。np.median(arr, axis=1):表示按行计算中位数,即每行排序后再取中位数,其结果为:[5. 3. 6.]。
