Python - 列表的方差

pythonserver side programmingprogramming

在本文中,我们将学习方差以及如何计算列表的方差。您可能遇到过这个寻找方差的问题,特别是在数据科学中。因此,在本文中,我们将学习如何找到方差。

方差

这告诉我们数据是如何分布的,它为我们提供了一组点的程度的度量。我们可以使用各种方法计算列表的方差。让我们来了解一下这些方法。

方法 1:使用统计模块

在此方法中,我们将使用内置统计模型 python 来计算列表的方差。

示例

import statistics

data = [2, 4, 6, 8, 10, 34, 23, 46, 67]
variance = statistics.variance(data)

print("原始列表值: ",data)
print("给定列表的方差为: ", variance)

输出

原始列表值: [2, 4, 6, 8, 10, 34, 23, 46, 67]
给定列表的方差列表为:508.19444444444446

解释

在上面的程序中,我们通过将 statistics 模块导入到程序中来使用它。然后我们使用 statistics 模块提供的 variance() 函数来计算方差。

方法 2:使用公式

这是计算任何列表方差的非常基本的方法。我们将简单地使用公式来查找方差。

示例

data = [2, 4, 6, 8, 10, 34, 23, 46, 67]
mean = sum(data) / len(data)
variance = sum((x - mean) ** 2 for x in data) / len(data)

print("原始列表值: ",data)
print("给定列表的方差为: ",variance)

输出

原始列表值: [2, 4, 6, 8, 10, 34, 23, 46, 67]
给定列表的方差为: 451.7283950617284

解释

在上面的程序中,我们手动计算列表数据的方差。首先,我们计算数据点的平均值。然后,我们将每个数据点与平均值之间的差值的平方相加,最后除以数据点的数量以获得方差。

方法 3:使用 Pandas

在此方法中,我们将使用在数据处理中非常流行的 pandas dataframe 库的概念。它为我们提供了 var() 方法,用于计算任何数据的方差。

示例

import pandas as pd

data = [2, 4, 6, 8, 10, 34, 23, 46, 67]
variance = pd.Series(data).var()

print("原始列表值: ",data)
print("给定列表的方差为: ",variance)

输出

原始列表值: [2, 4, 6, 8, 10, 34, 23, 46, 67]
给定列表的方差为: 508.19444444444446

解释

在上面的程序中,我们导入了 pandas 模块,并将列表转换为 PandasSeries,然后使用 var() 方法计算该系列的方差。

方法 4:使用 welford 算法

在此方法中,我们将使用 welford 算法来计算列表值的方差。它使用单次传递来计算列表数据的方差。

示例

import pandas as pd

data = [2, 4, 6, 8, 10, 34, 23, 46, 67]
n = len(data)
mean = variance = 0

for i, x in enumerate(data, 1):
   delta = x - mean
   mean += delta / i
   variance += delta * (x - mean)

variance /= n
print("原始列表值: ",data)
print("给定列表的方差为: ",variance)

输出

原始列表值: [2, 4, 6, 8, 10, 34, 23, 46, 67]
给定列表的方差为: 451.7283950617284

解释

在上面的程序中,我们使用了 Welford 算法,通过一次数据计算列表数据的方差。此方法比其他方法更节省内存,因为它在一次传递中计算方差。

方法 5:使用 Numba 库

在此方法中,我们将使用 python 中的 Numba 库来计算列表的方差。 Numa 是 Python 的即时编译器,用于加速数值函数。让我们用一个例子来看一下。

示例

import numba as nb
def calc_variance(data):
   mean = variance = 0
   n = len(data)

   for i, x in enumerate(data, 1):
      delta = x - mean
      mean += delta / i
      variance += delta * (x - mean)

   return variance / n

data = [2, 4, 6, 8, 10, 34, 23, 46, 67]
variance =calc_variance(data)

print("原始列表值: ",data)
print("给定列表的方差为: ",variance)

输出

原始列表值: [2, 4, 6, 8, 10, 34, 23, 46, 67]
给定列表的方差为: 451.7283950617284

解释

在上面的例子中,我们使用 Numba 的装饰器通过即时 (JIT) 编译来编译函数 calc_variance 。这可以更快地优化方差计算器。

方法 6:使用 Scipy 库

在此方法中,我们将使用非常强大且有用的 Scipy 库。它为我们提供了计算列表方差的函数。让我们看看如何使用程序。

示例

from scipy import stats

data = [2, 4, 6, 8, 10, 34, 23, 46, 67]
variance = stats.tvar(data)

print("原始列表值: ",data)
print("给定列表的方差为: ",variance)

输出

原始列表值: [2, 4, 6, 8, 10, 34, 23, 46, 67]
给定列表的方差为: 508.19444444444446

解释

这里上面的程序中,我们导入了 scipy.stats 模块并使用 tvar() 函数计算列表数据的方差。

结论

因此,我们了解了方差以及如何使用各种方法计算任何给定列表的方差。我们看到了不同的方法,如 Scipy、statistics、pandas、welford,其中 welford 是一种非常节省内存的技术。您可以使用最适合您需求的任何方法,但拥有知识对于学习目的至关重要。


相关文章


有用资源