在Python中计算算术平均值(一种平均值)。

8 浏览
0 Comments

在Python中计算算术平均值(一种平均值)。

Python中是否有一种内置或标准库方法来计算一个数字列表的算术平均值(一种平均值类型)?

0
0 Comments

在Python中计算算术平均值(一种平均值)的问题是问题的出现原因以及解决方法。

问题的出现原因是在Python中计算算术平均值时,可以使用`statistics.mean`函数。该函数在Python 3.4及以上版本中可用。对于3.1-3.3版本的用户,可以在PyPI上找到一个名为`stats`的旧版本模块。只需将`statistics`更改为`stats`即可使用。

但是需要注意的是,与其他解决方案相比,`statistics.mean`函数非常慢。可以通过比较`timeit("numpy.mean(vec))`、`timeit("sum(vec)/len(vec)")`和`timeit("statistics.mean(vec)")`来进行对比,后者的速度比其他解决方案慢很多(在我的PC上有时超过100倍)。这似乎是由于`statistics`模块中`sum`运算符的特别精确的实现所导致的,具体可以参考PEP和Code。不过,对于`statistics._sum`和`numpy.sum`之间的性能差异的原因尚不清楚。

这是因为`statistics.mean`函数试图保持正确性。它可以正确计算`[1e50, 1, -1e50] * 1000`的平均值。

另外,`statistics.mean`函数还可以接受一个值的生成器表达式,而使用`len()`作为除数的所有解决方案都无法处理。

从Python 3.8开始,还引入了一个更快的`statistics.fmean`函数来计算算术平均值。

0
0 Comments

计算算术平均值(一种平均值)的问题在Python中的出现原因是没有发现标准库中有现成的方法。然而,可以使用以下类似的代码进行计算:

def mean(numbers):
    return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0

在numpy中,可以使用`numpy.mean()`方法进行计算。

一个常见的做法是将空列表`[]`的平均值设为`0`,可以通过`float(sum(l))/max(len(l),1)`实现。

根据PEP 8的建议,`l`是一个不好的变量名,因为它看起来太像`1`。另外,我会使用`if l`而不是`if len(l) > 0`。详情请参见[这里](https://stackoverflow.com/questions/53513)。

为什么要使用`max`函数?

参考上面的问题:为了避免对空列表进行除零操作(对应`[]`的情况)。

在Python 3中,不需要调用`float`函数。此外,我认为对于空列表,抛出`ZeroDivisionError`异常而不是返回0更有意义。经过这些修改,代码如下:

return sum(numbers) / len(numbers)

在Python 3中,可以使用"statistics"包中的`mean`函数。详情请参见[这里](https://docs.python.org/3/library/statistics.html#statistics.mean)。

空列表没有平均值,请不要假装它们有。

0
0 Comments

NumPy是一个用于科学计算的Python库,它提供了许多用于处理数组和矩阵的功能。其中一个功能是计算算术平均值,也就是平均数。然而,安装NumPy在虚拟环境中可能会遇到一些困难。

根据评论中的描述,以前在虚拟环境中安装NumPy确实有一些麻烦。但是,最近一年多来,安装NumPy变得非常简单了。在OSX的虚拟环境中使用NumPy也没有问题。

对于Travis CI等持续集成系统来说,安装NumPy可能需要额外几分钟的时间。如果你只需要计算平均值,并且对快速和轻量级的构建很重要,可以考虑使用系统中全局安装的NumPy。

有人建议在Travis CI的虚拟环境中使用通过apt-get安装的NumPy,这样可能会更快,即使只需要计算平均值也可以使用。

对于大多数情况下,在虚拟环境中安装NumPy是没有问题的。只需要使用命令pip install numpy即可完成安装。

NumPy现在已经成为一个非常标准的库,可以方便地使用。尽管以前在虚拟环境中安装NumPy可能会遇到一些问题,但现在已经非常容易了。如果你需要计算平均值,NumPy是一个很好的选择。

0