web-dev-qa-db-ja.com

リストの平均を求める

私はPythonでリストの平均を見つけなければなりません。これが私のコードです

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)

私はそれを持っているのでそれはリストの中の値を一緒に加えるが、私はそれをそれらに分割する方法を知らないのか?

398
Carla Dessi

もしあなたのreduceがすでにあなたの合計を返しているのなら、あなたがしなければならないのは除算だけです。

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l) / len(l)

あなたはラムダを必要としないのでsum(l)/len(l)はもっと簡単でしょう。

Intの代わりにもっと正確なfloat型の結果が欲しいのなら、float(len(l))の代わりにlen(l)を使ってください。

480
Herms
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / float(len(l))
486
yprez

または numpy.mean を使用することもできます。

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

import numpy as np
print np.mean(l)
260
Akavall

statistics モジュールがpython 3.4に 追加されましたmean という平均を計算する機能があります。あなたが提供したリストの例は次のようになります。

from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
209

Pythonが完全に機能的なreduce()関数を持っているのに、なぜこれにsum()を使うのでしょうか。

print sum(l) / float(len(l))

float()はPythonに浮動小数点除算を強制するために必要です。)

41
kindall

Python> = 3.4を使用している場合は統計ライブラリがあります。

https://docs.python.org/3/library/statistics.html

あなたはそれをこのような平均的な方法で使うことができます。あなたが意味を見つけたいと思う数のリストがあるとしましょう: -

list = [11, 13, 12, 15, 17]
import statistics as s
s.mean(list)

それはあまりにも有用であるstdev、分散、モード、調和平均、中央値などのような他の方法も持っています。

26
Chetan Sharma

Floatにキャストする代わりに、合計に0.0を加えることができます。

def avg(l):
    return sum(l, 0.0) / len(l)
17
Maxime Chéramy

sum(l) / float(len(l))が正しい答えですが、完全を期するために、単回の簡約で平均を計算することができます。

>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114

これにより、わずかな丸め誤差が生じる可能性があります。

>>> sum(l) / float(len(l))
20.111111111111111
10
Andrew Clark

上記のオプションを使用してみましたが、うまくいきませんでした。これを試して:

from statistics import mean

n = [11, 13, 15, 17, 19]
print(n)
print(mean(n))

python 3.5で働いた

6
Ngury Mangueira

私はUdacityの問題を解決するために同様の質問をしました。組み込み関数の代わりに、私はコーディングしました:

def list_mean(n):

    summing = float(sum(n))
    count = float(len(n))
    if n == []:
        return False
    return float(summing/count)

いつもよりはるかに長いですが、初心者にとってはかなり挑戦的です。

4
Paulo YC

あるいはpandasSeries.meanメソッドを使います。

pd.Series(sequence).mean()

デモ:

>>> import pandas as pd
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> pd.Series(l).mean()
20.11111111111111
>>> 

ドキュメントから:

Series.mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

そしてこれがそのためのドキュメントです。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mean.html

そして全体のドキュメント:

https://pandas.pydata.org/pandas-docs/stable/10min.html

4
U9-Forward

もしあなたが単なる平均(別名平均)以上のものを得たいのなら、scipy statsをチェックしてください。

from scipy import stats
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(stats.describe(l))

# DescribeResult(nobs=9, minmax=(2, 78), mean=20.11111111111111, 
# variance=572.3611111111111, skewness=1.7791785448425341, 
# kurtosis=1.9422716419666397)
4
jasonleonhard

どちらも、整数または少なくとも10個の10進数の値に近い値にすることができます。しかし、もしあなたが本当に長い浮動小数点数値を考えているのであれば、両者は異なる可能性があります。アプローチはあなたが達成したいものによって異なります。

>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> print reduce(lambda x, y: x + y, l) / len(l)
20
>>> sum(l)/len(l)
20

浮動値

>>> print reduce(lambda x, y: x + y, l) / float(len(l))
20.1111111111
>>> print sum(l)/float(len(l))
20.1111111111

@アンドリュークラークは彼の発言に正しかった。

3
Superpaul

初心者として、私はちょうどこれをコーディングしました:

L = [15, 18, 2, 36, 12, 78, 5, 6, 9]

total = 0

def average(numbers):
    total = sum(numbers)
    total = float(total)
    return total / len(numbers)

print average(L)
3
leo0019

移動平均をとるためにreduceを使うためには、これまでに見た要素の総数だけでなく総数も追跡する必要があります。これはリストの中の重要な要素ではないので、reduceに追加の引数を渡す必要があります。

>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> running_average = reduce(lambda aggr, elem: (aggr[0] + elem, aggr[1]+1), l, (0.0,0))
>>> running_average[0]
(181.0, 9)
>>> running_average[0]/running_average[1]
20.111111111111111

仮定

x = [[-5.01,-5.43,1.08,0.86,-2.67,4.94,-2.51,-2.25,5.56,1.03], [-8.12,-3.48,-5.52,-3.78,0.63,3.29,2.09,-2.13,2.86,-3.33], [-3.68,-3.54,1.66,-4.11,7.39,2.08,-2.59,-6.94,-2.26,4.33]]

各行のxを取得する必要がある場合は、meanの次元が3 * 10であることに気付くでしょう。これを入力できます。

theMean = np.mean(x1,axis=1)

import numpy as npを忘れないでください

3
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

l = map(float,l)
print '%.2f' %(sum(l)/len(l))
1
user1871712

リストで平均を見つける次のPYTHONコードを使用して:

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(sum(l)//len(l))

これを簡単に試してください。

1
Mani Kandan

上記の答えをいくつか組み合わせて、reduceを使って動作し、reduce関数内でLが利用可能であると仮定していない次のようなものを思いつきました。

from operator import truediv

L = [15, 18, 2, 36, 12, 78, 5, 6, 9]

def sum_and_count(x, y):
    try:
        return (x[0] + y, x[1] + 1)
    except TypeError:
        return (x + y, 2)

truediv(*reduce(sum_and_count, L))

# prints 
20.11111111111111
0
reubano

別のアプローチを追加したい

import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)
0
Taylan
print reduce(lambda x, y: x + y, l)/(len(l)*1.0)

以前に投稿された

sum(l)/(len(l)*1.0)

1.0はあなたが浮動小数点除算を得ることを確認することです

0
RussS