私はPythonでリストの平均を見つけなければなりません。これが私のコードです
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
私はそれを持っているのでそれはリストの中の値を一緒に加えるが、私はそれをそれらに分割する方法を知らないのか?
もしあなたの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)
を使ってください。
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / float(len(l))
または numpy.mean を使用することもできます。
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import numpy as np
print np.mean(l)
statistics モジュールがpython 3.4に 追加されました 。 mean という平均を計算する機能があります。あなたが提供したリストの例は次のようになります。
from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
Pythonが完全に機能的なreduce()
関数を持っているのに、なぜこれにsum()
を使うのでしょうか。
print sum(l) / float(len(l))
(float()
はPythonに浮動小数点除算を強制するために必要です。)
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、分散、モード、調和平均、中央値などのような他の方法も持っています。
Floatにキャストする代わりに、合計に0.0を加えることができます。
def avg(l):
return sum(l, 0.0) / len(l)
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
上記のオプションを使用してみましたが、うまくいきませんでした。これを試して:
from statistics import mean
n = [11, 13, 15, 17, 19]
print(n)
print(mean(n))
python 3.5で働いた
私はUdacityの問題を解決するために同様の質問をしました。組み込み関数の代わりに、私はコーディングしました:
def list_mean(n):
summing = float(sum(n))
count = float(len(n))
if n == []:
return False
return float(summing/count)
いつもよりはるかに長いですが、初心者にとってはかなり挑戦的です。
あるいはpandas
のSeries.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
そして全体のドキュメント:
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)
どちらも、整数または少なくとも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
@アンドリュークラークは彼の発言に正しかった。
初心者として、私はちょうどこれをコーディングしました:
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)
移動平均をとるために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
を忘れないでください
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
l = map(float,l)
print '%.2f' %(sum(l)/len(l))
リストで平均を見つける次のPYTHONコードを使用して:
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(sum(l)//len(l))
これを簡単に試してください。
上記の答えをいくつか組み合わせて、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
別のアプローチを追加したい
import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)
print reduce(lambda x, y: x + y, l)/(len(l)*1.0)
以前に投稿された
sum(l)/(len(l)*1.0)
1.0はあなたが浮動小数点除算を得ることを確認することです