0

データセットを調べるプログラムを作成したデータポイントのセットがあり、そのセットからnポイントごとに取得し、合計して新しいリストに入れます。これで、単純な棒グラフを作成できます。

ここで、新しいリストの離散平均を計算したいと思います。

私が使用している式は次のとおりです。基本的に、番号が含まれt_av=(1/nsmp) Sum[N_i*t_i,{i,n_l,n_u}]
ているnsmpビンがあり、ビンの時間であり、最初のビンであり、最後のビンです。N_it_in_ln_u

したがって、私のリストがこれである場合: [373, 156, 73, 27, 16]
5つのビンがあり、次のものがあります:t_av=1/5 (373*1+156*2+73*3+27*4+16*5)=218.4

今、私は問題に遭遇しました。私はこれで試しました:

for i in range(0,len(L)):
    sr_vr = L[i]*i

tsr=sr_vr/nsmp

ここで、nsmp は設定できるビンの数で、L計算済みです。範囲は 0,1,2,3,4から始まるので、最初のビンが 0 で計算されるため、正しい答えは得られませんrange(1,len(L)+1)。それでもリストの 2 番目 (1) の要素に 1 を掛けると、最後の部分の 1 つのエントリ不足になります。IndexError: list index out of rangeL[i]*i

これを修正するにはどうすればよいですか?

4

1 に答える 1

1

そのまま使用できますL[i]*(i+1)(ゼロベースのインデックス付けに固執すると仮定します)。

ただし、 を使用enumerate()してインデックスと値を一緒にループすることもできます。また1、2 番目の引数として指定して、インデックス作成が では1なく で始まるようにすることもできます0

これが私がこれを書く方法です:

tsr = sum(x * i for i, x in enumerate(L, 1)) / len(L)

Python 2.x を使用していて、L完全に整数が含まれている場合、整数除算が実行されることに注意してください。float を取得するには、引数の 1 つを float に変換するだけです (たとえば、float(len(L)))。も使用できますfrom __future__ import division

于 2013-05-16T23:21:29.893 に答える