Pythonでリストの平均を見つけなければなりません。これはこれまでのところ私のコードです
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
私はそれを持っているので、リストの値を一緒に追加しますが、それらをそれらに分割する方法を知りませんか?
sum(L) / float(len(L))
。同様に、呼び出し元のコードで空のリストを扱うif not L: ...
Pythonでリストの平均を見つけなければなりません。これはこれまでのところ私のコードです
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
私はそれを持っているので、リストの値を一緒に追加しますが、それらをそれらに分割する方法を知りませんか?
sum(L) / float(len(L))
。同様に、呼び出し元のコードで空のリストを扱うif not L: ...
回答:
Python 3.4以降では、 statistics.mean()
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import statistics
statistics.mean(l) # 20.11111111111111
古いバージョンのPythonでは次のことができます
sum(l) / len(l)
Python 2ではlen
、float除算を取得するには、floatに変換する必要があります
sum(l) / float(len(l))
使用する必要はありませんreduce
。これは非常に遅く、Python 3で削除されました。
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / len(l)
from __future__ import division
、醜いものを取り除くことができますfloat
。
float
地獄のように醜いですが、単純にしたかっただけです。
sum(l, 0.0) / len(l)
sum(l) / len(l)
使用できますnumpy.mean
:
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import numpy as np
print(np.mean(l))
sum(l)/len(l)
np.array(l).mean()
であるずっと速いです。
np.mean(l)
し、np.array(l).mean
ほぼ同じ速度であり、sum(l)/len(l)
二倍の速さについてです。私が使用l = list(np.random.rand(1000))
コースの両方、numpy
場合の方法ははるかに高速になっl
ていますnumpy.array
。
統計モジュールがされてきたのpython 3.4に追加します。平均と呼ばれる平均を計算する機能があります。指定したリストの例は次のとおりです。
from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
statistics.StatisticsError: mean requires at least one data point
よりわかりやすくするのではなく、誤って空のリストを渡すと、エラーが発生しやすくZeroDivisionError: division by zero
なりsum(x) / len(x)
ます。
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))
正解ですが、完全を期すために、1回の削減で平均を計算できます。
>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114
これにより、わずかな丸めエラーが発生する可能性があることに注意してください。
>>> sum(l) / float(len(l))
20.111111111111111
reduce()
空のリストに対してFalseを与える最後の引数として0をFalseに置き換えることができます。それ以外の場合は以前の平均になります。
float
するのlen
ですか?
または、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
そして、ドキュメント全体:
Udacityの問題を解決するために同様の質問がありました。私がコーディングした組み込み関数の代わりに:
def list_mean(n):
summing = float(sum(n))
count = float(len(n))
if n == []:
return False
return float(summing/count)
通常よりもはるかに長いですが、初心者にとっては非常に困難です。
False
(integerと同等0
)は、このエラーを処理するために考えられる最悪の方法です。をキャッチし、ZeroDivisionError
より良いものを上げる方が良いでしょう(おそらくValueError
)。
ValueError
優れていZeroDivisionError
ますか?後者はより具体的であり、さらに、別のエラーを再スローするためだけに算術エラーをキャッチすることは少し不必要に思えます。
ZeroDivisionError
、計算がどのように行われているか(つまり、リストの長さによる除算が含まれている)を知っている場合にのみ役立つからです。それがわからない場合は、渡した値の問題が何であるかはわかりません。一方、新しい例外には、より具体的な情報を含めることができます。
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)
移動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
どちらも、整数または少なくとも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
@Andrew Clark氏の発言は正しかった。
仮定
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
に取得する必要がある場合は、次元3 * 10 を持っているmean
ことがわかります
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))
上記の答えのいくつかを組み合わせると、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
numbers = [0,1,2,3]
numbers[0] = input("Please enter a number")
numbers[1] = input("Please enter a second number")
numbers[2] = input("Please enter a third number")
numbers[3] = input("Please enter a fourth number")
print (numbers)
print ("Finding the Avarage")
avarage = int(numbers[0]) + int(numbers[1]) + int(numbers[2]) + int(numbers [3]) / 4
print (avarage)