0

初めての Python ユーザーで、迷っています。毎日の気温とその日までの気温の移動平均を表示するリストからテーブルを作成する必要があります。

xData = arange(1,32)    
tData = [86,87,84,86,86,86,84,83,90,89,88,85,86,79,83,81, \
     75,80,81,85,81,88,89,87,84,85,86,88,88,90,90]
avg = [86.]  # First value for monthly avg high temp is just the Day 1 temp
4

4 に答える 4

5

移動平均は、リスト内の各値について、その値までのすべての値の平均です。あなたの例の簡素化されたバージョンの場合:

>>> tData = [86,87,84,86]

移動平均は86/1(86+87)/2(86+87+84)/3、および(86+87+84+86)/4です。

したがって、各インデックスでの移動平均は、現在の合計を (インデックス + 1) で割ったものです。

実行中の合計は次のように取得できますaccumulate

>>> list(accumulate(tData))
[86, 173, 257, 343]

そして、次のようにして (1 ベースの) インデックスを取得できますenumerate

>>> list(enumerate(accumulate(tData, start=1))
[(1, 86), (2, 73), (3, 257), (4, 343)]

したがって、次のように分割します。

>>> [total / index for index, total in enumerate(accumulate(tData, start=1))]
[86.0, 86.5, 85.66666666666667, 85.75]

またはstatistics、Python 3.4、または 3.1-3.3 のバックポート/前身statsでの使用:

>>> from stats import running_average
>>> running_average(tData)
[86, 86.5, 85.66666666666667, 85.75]

もちろん、必要に応じていつでも明示的に行うことができます。

>>> running_sum, running_sums = 0, []
>>> for value in tData:
...     running_sum += value
...     running_sum.append(running_sum)
>>> [value / index for index, value in enumerate(running_sums, start=1)]
[86, 86.5, 85.66666666666667, 85.75]

… あるいは:

>>> running_sum, running_averages = 0, []
>>> for index, value in enumerate(tData, start=1):
...     running_sum += value
...     running_averages.append(running_sum / index)
>>> running_averages
[86, 86.5, 85.66666666666667, 85.75]
于 2013-09-10T01:30:10.187 に答える