NumPy 求中位数

中位数,又称 “中值” 。它指的是按从小到大排序之后,处于中间位置的数。所谓的顺序排序,指的是从小到大排序。

  • 如果一组数的个数是奇数,比如有 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.]。

上一篇: NumPy 求最值

下一篇: NumPy 求平均数

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号