数値のリストの算術平均(1種類の平均)を計算する組み込みまたは標準のライブラリメソッドはPythonにありますか?
数値のリストの算術平均(1種類の平均)を計算する組み込みまたは標準のライブラリメソッドは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)
。
max
?
NumPyにnumpy.mean
は、算術平均であるaがあります。使い方はこれと同じくらい簡単です:
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
使用する statistics.mean
:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
Python 3.4以降で使用できます。3.1-3.3ユーザーの場合、モジュールの古いバージョンがPyPIでの名前で入手できますstats
。に変更statistics
してくださいstats
。
statistics.mean
が正しくなるようにするためです。の平均を正しく計算し[1e50, 1, -1e50] * 1000
ます。
statistics.mean
また、値のジェネレータ式も受け入れますlen()
。除数に使用するすべてのソリューションはこれを抑制します。
numpyやscipyも必要ありません...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
from __future__ import division
では、プログラムのトップにいる場合
a = list()
ですか?提案されたコードの結果はになりZeroDivisionError
ます。
scipyを使用する:
import scipy;
a=[1,2,4];
print(scipy.mean(a));
フロートにキャストする代わりに、以下を実行できます
def mean(nums):
return sum(nums, 0.0) / len(nums)
またはラムダを使用して
mean = lambda nums: sum(nums, 0.0) / len(nums)
アップデート:2019-12-15
Python 3.8は統計モジュールに関数fmeanを追加しました。どちらが高速で、常に浮動小数点数を返します。
データを浮動小数点数に変換し、算術平均を計算します。
これは、mean()関数よりも高速に実行され、常にfloatを返します。データはシーケンスまたは反復可能です。入力データセットが空の場合、StatisticsErrorを発生させます。
fmean([3.5、4.0、5.25])
4.25
バージョン3.8の新機能。
from statistics import mean
avarage=mean(your_list)
例えば
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
結果は
3.0
def avg(l):
"""uses floating-point division."""
return sum(l) / float(len(l))
l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]
print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
avg
それはと同じくらい簡単なので、私は常にbuiltins / stdlibから省略されていると思います
sum(L)/len(L) # L is some list
また、警告はローカルでの使用のために呼び出し元コードですでに対処されています。
注目すべき警告:
非浮動結果:python2では、9/4は2です。解決、使用、float(sum(L))/len(L)
またはfrom __future__ import division
ゼロによる除算:リストは空の場合があります。解決する:
if not L:
raise WhateverYouWantError("foo")
avg = float(sum(L))/len(L)
あなたの質問に対する正しい答えはを使うことstatistics.mean
です。しかし、面白くするlen()
ために、これは関数を使用しない平均のバージョンです。そのため、(のようにstatistics.mean
)をサポートしていないジェネレーターで使用できますlen()
。
from functools import reduce
from operator import truediv
def ave(seq):
return truediv(*reduce(lambda a, b: (a[0] + b[1], b[0]),
enumerate(seq, start=1),
(0, 0)))
他の人はすでに非常に良い回答を投稿しましたが、一部の人々はまだMean(avg)を見つけるための古典的な方法を探している可能性があるため、ここに投稿します(Python 3.6でテストされたコード)。
def meanmanual(listt):
mean = 0
lsum = 0
lenoflist = len(listt)
for i in listt:
lsum += i
mean = lsum / lenoflist
return float(mean)
a = [1, 2, 3, 4, 5, 6]
meanmanual(a)
Answer: 3.5