在没有 NumPy 的情况下,在 Python 中计算标准差

12 2025 年 4 月 | 阅读 5 分钟

本文重点介绍如何在不使用 NumPy 库的情况下在 Python 中计算标准差。文章探讨了使用 Python 内置的 math 库和 statistics 模块来计算总体标准差和样本标准差的替代方法。通过实际示例和场景演示了计算过程,强调了手动方法的可控性和灵活性。本文将涵盖实现一个 Python 程序来确定数据集的标准差。考虑一组绘制在坐标轴上的数值。这些数字之间的变化,称为总体,被称为标准差。当标准差较低时,数据点会紧密地绘制在均值附近。标准差衡量数据点的分散程度,高标准差表示较大的变异性,而低标准差表示接近均值。在 Python 中手动计算标准差时,math 或 statistics 等库在精确控制方面非常有用,尤其是在不首选 NumPy 的情况下。总体标准差考虑整个数据集,而样本标准差通过除以 n-1(其中 n 是样本大小)来调整较小的样本。这些计算在数据分析、机器学习和金融等领域至关重要,因为它们可以深入了解数据的一致性和变异性,从而实现更好的决策和预测建模。

它由数据集方差的平方根表示。标准差有两种类型。

总体标准差的计算使用总体中的每个数据值。因此,它是一个固定值。数学公式的定义是:

Calculating Standard Deviation in Python without NumPy

其中,

  • 数据集的均值用 Xm 表示。
  • 数据集的元素用 Xi 表示。
  • 数据集总共有 n 个条目。

然而,样本标准差的值取决于所选的样本,因为它是一种仅在总体数据值的子集上计算的统计量。数学公式的定义是:

Calculating Standard Deviation in Python without NumPy

其中,

  • 数据集的均值用 Xm 表示。
  • 数据集的元素用 Xi 表示。
  • 数据集总共有 n 个条目。

输入和输出场景

现在让我们看一下不同数据集的几个输入-输出场景。

假设数据集中只有正整数。

输入: [7, 11, 13, 20, 25, 30]

总体标准差: 8.0760

样本标准差: 8.8468

假设数据集只包含负整数

输入: [-7, -11, -13, -20, -25, -30]

总体标准差: 8.0760

样本标准差: 8.8468

假设数据集只包含正整数和负整数

输入: [-7, -11, -13, 20, 25, 30]

总体标准差: 17.9877

样本标准差: 19.7045

使用数学公式

同一篇文章前面已经讨论过标准差公式。现在让我们看一下将数学公式应用于各种数据集的 Python 程序。

示例

在下面的示例中,我们加载 math 库并使用数据集方差的内置 sqrt() 方法来确定其标准差。

代码

输出

 
Population standard deviation of the dataset is 8.076027626390477
Sample standard deviation of the dataset is 8.846845012017937   

说明

该代码计算数据集的样本和总体标准差,从均值和方差开始。它将方差除以元素总数以获得总体标准差。然后取该值的平方根。为了计算样本标准差,将方差除以元素总数减一(作为对较小样本大小的校正),然后取平方根。结果对于总体标准差大约为 8.08,对于样本标准差大约为 8.85。

使用 NumPy 模块的 std() 函数

在此方法中,仅使用 numpy.std() 函数处理 NumPy 数组的成员来计算总体标准差,该方法涉及导入 NumPy 模块。

示例

下面的 Python 程序使用 NumPy 数组的成员计算标准差。

输出

 
Population standard deviation of the dataset is 8.539125638299666   

说明

该方法使用 NumPy 来计算数据集的总体标准差,考虑每个数据点并计算与均值的平均偏差。结果显示了数据值中的分布程度,大约为 8.54。这种简洁的方法利用了 NumPy 数学运算的效率。

利用 Statistics 模块的 stdev() 和 pstdev() 函数

Python 的 statistics 包中的 stdev() 和 pstdev() 函数用于确定样本数据集的标准差。在 Python 中,pstdev() 函数计算总体标准差,而 stdev() 方法仅计算样本标准差。

这两个函数具有相同的参数和返回类型。

示例 1:使用 stdev() 函数

以下 Python 程序演示了如何使用 stdev() 方法确定数据集的样本标准差。

代码

输出

 
Standard Deviation of the dataset is 6.65331997326648   

说明

此函数在 Python 中使用 NumPy 库包进行数值计算。它旨在返回数据集的总体标准差。首先,它声明一个包含数据集 [10, 15, 20, 25, 30, 35] 的 NumPy 数组。然后,它利用 np.std() 函数,考虑数据集中的每一个数据点来计算总体标准差与所有数据点之间平均值的平均偏差。结果显示了数据值中的分布程度,大约为 8.54。这种简洁的方法利用了 NumPy 数学运算的效率。

示例 2:使用 pstdev() 函数

以下 Python 程序演示了如何使用 pstdev() 方法确定数据集的总体标准差。

代码

输出

 
Population Standard Deviation of the dataset is 8.668269082630562   

说明

提供的 Python 代码使用 statistics 包中的 pstdev() 方法来确定数据集 [14, 19, 23, 28, 33, 40] 的总体标准差。总体标准差衡量数据点围绕均值的分布,由代码在定义数据集后计算得出。它表示与均值的平均偏差。