NumPy 求平均数

在统计学中,平均数是一种常用的衡量数据集中趋势的指标。对于平均数来说,它具有以下性质:

  • 平均数是一组数据的均衡点,等于所有数据的总和除以数据个数,它能反映数据的中心位置。
  • 平均数对极端值敏感,任一数据点的变化都会影响平均值。
  • 当数据服从对称分布时,平均数与中位数、众数重合;对于偏态分布,平均数会偏向极端值方向。

NumPy 求平均数函数

在 NumPy 中,我们可以使用 mean() 函数来计算数组的算术平均数。

语法:

numpy.mean(
    arr,
    axis=None,
    dtype=None,
    out=None,
    keepdims=False,
    where=True
)

说明:

mean() 函数接收以下参数。

  • arr(必选):是一个数组
  • axis(可选,默认:None):指定沿哪个轴计算平均值。
  • 当取值为 None 时,表示对整个数组求平均值(结果是一个数)。
  • 对于二维数组来说:
    • axis=0:表示按 “列” 来计算平均值(每一列算一个平均数,沿着 “竖着” 的方向)。
    • axis=1:表示按 “行” 来计算平均值(每一行算一个平均数,沿着 “横着” 的方向)。
    • 如果是元组:比如 axis=(0, 1),此时表示一次在多个轴上求平均值。
  • dtype(可选,默认:None):指定计算时的数据类型。如果不填,NumPy 会自动选择合适的类型,比如:
    • 整数类型通常会自动升级为 float64 以保证精度。
    • 浮点类型会保持原来的类型。
  • out(可选,默认:None):表示把结果存到已有数组中,而不是新建一个数组。这样在某些情况下,可以提高性能。
  • keepdims(可选,默认:False):是否保留被压缩的维度。如果设置为 True,被缩减的轴保留为长度 1 的维度,确保输出与原数组维度一致。
  • where(可选):是一个布尔数组或条件表达式。只有 where 中为 True 的元素才会被包含在平均值的计算中。

提示:

  • 如果数组中包含非数值类型(如字符串)的元素,则会触发 TypeError 异常。
  • 如果只是想快速求整个数组的平均值,我们直接用 np.mean(arr) 就行。
  • axis 是最容易出错的地方,建议小伙伴们多画图或打印数组的形状来理解。

NumPy 求平均数示例

接下来,我们通过几个简单的例子来讲解一下 NumPy 是如何求平均数的。

示例 1:一维数组的平均值

import numpy as np

arr = np.array([2, 4, 6, 8])
result = np.mean(arr)

print(result) 

运行结果如下。

5.0

分析:

对于 np.mean(arr) 来说,它会计算所有元素之和(即 20),然后除以元素个数(即 4),最终得到平均数 5.0。

示例 2:沿轴计算平均值

import numpy as np

arr = np.array([[1, 2], [3, 4]])

print(np.mean(arr, axis=0))       # 列平均
print(np.mean(arr, axis=1))       # 行平均

运行结果如下。

[2. 3.]
[1.5 3.5]

分析:

np.mean(arr, axis=0) 表示计算每列的平均值:第一列 ( 1 + 3 ) / 2 = 2,第二列 ( 2 + 4 ) / 2 = 3。

np.mean(arr, axis=1) 表示计算每行的平均值:第一行 ( 1 + 2 ) / 2 = 1.5,第二行 ( 3 + 4 ) / 2 = 3.5。

示例 3:​保持维度(keepdims = True)

import numpy as np

arr = np.array([[1, 2], [3, 4]])
result = np.mean(arr, axis=1, keepdims=True)

print(result)

运行结果如下。

[[1.5]
 [3.5]]

分析:

在上面的示例中,当 axis 设置为 1 时,计算了每一行的平均值:

  • 第一行:(1 + 2) / 2 = 1.5。
  • 第二行:(3 + 4) / 2 = 3.5。

由于 keepdims 设置为 True,结果保持了原始数组的维度,因此输出是一个形状为 (2, 1) 的二维数组。

示例 4:条件筛选(where 参数)

import numpy as np

arr = np.array([-1, 3, -5, 7])
result = np.mean(arr, where=(arr > 0))

print(result)

运行结果如下。

5.0

分析:

np.mean(arr, where=(arr > 0)) 中的 where=(arr > 0) 表示只计算正数的平均值,也就是:(3 + 7) / 2 = 5.0。需要注意的是,如果筛选后无元素,则结果将为 nan。

实际上,这个例子使用了 “NumPy 布尔索引” 的语法来实现条件筛选。

示例 5:指定数据类型(dtype 参数)

import numpy as np

arr = np.array([10, 20, 30])
result = np.mean(arr, dtype=np.float32)

print(result)

运行结果如下。

20.0

分析:

np.mean(arr, dtype=np.float32) 中的 dtype=np.float32 表示将结果强制输出位单精度浮点数,最终 20.0 的类型为 float32。

上一篇: NumPy 求中位数

下一篇: NumPy 求众数

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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