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

jrd*_*oko 258 python math statistics average mean

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

NPE*_*NPE 279

我不知道标准库中有什么.但是,您可以使用以下内容:

def mean(numbers):
    return float(sum(numbers)) / max(len(numbers), 1)

>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
Run Code Online (Sandbox Code Playgroud)

在numpy,有numpy.mean().

  • 一个常见的事情是考虑`[]`的平均值是'0`,这可以通过`float(sum(l))/ max(len(l),1)`来完成. (20认同)
  • PEP 8 [说](https://www.python.org/dev/peps/pep-0008/#names-to-avoid)"l"是一个糟糕的变量名,因为它看起来非常像"1".另外,我会使用`if l`而不是`if len(l)> 0`.见[这里](/sf/ask/3745941/) (8认同)
  • 空列表毫无意义。请不要假装他们这样做。 (5认同)
  • 请参阅上面的问题:避免除以零(对于[]) (3认同)

Ben*_*ngt 191

NumPy有一个numpy.mean算术平均值.用法就像这样简单:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
Run Code Online (Sandbox Code Playgroud)

  • @vcarel:"numpy是安装在virtualenv中的噩梦".我不确定你为什么这么说.过去一直如此,但在过去的一年或更长时间里,它非常容易. (45认同)
  • numpy是一个安装在virtualenv中的噩梦.你应该考虑不使用这个lib (6认同)
  • 我必须赞同这个评论.我目前在OSX中的virtualenv中使用numpy,并且绝对没有问题(目前使用CPython 3.5). (5认同)
  • 使用像Travis CI这样的持续集成系统,安装numpy需要几分钟.如果快速轻巧的构建对您有价值,并且您只需要平均值,请考虑. (4认同)
  • @AkseliPalén[Travis CI上的虚拟环境可以使用通过apt-get使用系统站点软件包安装的numpy](http://danielnouri.org/notes/2012/11/23/use-apt-get-to-install-蟒依赖性换特拉维斯-CI /).这可能很快就可以使用,即使只需要一个平均值. (2认同)

kir*_*sos 176

在Python 3.4中,有一个新statistics.mean模块.您现在可以使用stats:

import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
Run Code Online (Sandbox Code Playgroud)

对于3.1-3.3用户,模块的原始版本在名称上的PyPI上可用statistics.只需stats改为statistics.mean.

  • @jhin这是因为`statistics.mean`试图*正确*.它正确计算了"[1e50,1,-1e50]*1000"的平均值. (8认同)
  • 请注意,与其他解决方案相比,这非常慢.比较`timeit("numpy.mean(vec))`,`timeit("sum(vec)/ len(vec)")和`timeit("statistics.mean(vec)")` - 后者比其他因素是一个巨大的因素(在我的电脑上有些情况下> 100).这似乎是由于`统计数据'中`sum`运算符的特别精确的实现,见[PEP](https://www.python .org/dev/peps/pep-0450 /)和[Code](https://hg.python.org/cpython/file/3.5/Lib/statistics.py).不确定性能差异大的原因但是,在`statistics._sum`和`numpy.sum`之间. (2认同)

小智 54

你甚至不需要numpy或scipy ......

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
Run Code Online (Sandbox Code Playgroud)

  • 然后意味着([2,3])会给2.小心浮标.更好地使用float(sum(l))/ len(l).更好的是,要小心检查列表是否为空. (23认同)
  • @jesusiniesta除了在python3中,分区执行它的目的:除 (13认同)
  • 如果您从程序顶部的__future__ import division`中选择,那么在Python 2.2+中 (11认同)

Ele*_*wen 8

使用scipy:

import scipy;
a=[1,2,4];
print(scipy.mean(a));
Run Code Online (Sandbox Code Playgroud)

  • [scipy.stats.mean已被弃用; 请更新您的代码以使用numpy.mean.](http://docs.scipy.org/doc/scipy-0.8.x/reference/generated/scipy.stats.mean.html) (36认同)

Vla*_*den 5

您可以执行以下操作,而不是转换为浮动

def mean(nums):
    return sum(nums, 0.0) / len(nums)
Run Code Online (Sandbox Code Playgroud)

或使用lambda

mean = lambda nums: sum(nums, 0.0) / len(nums)
Run Code Online (Sandbox Code Playgroud)