计算python中的离散均值

时间:2013-05-16 23:19:17

标签: python sum range

我有一组数据点,我已经制作了一个程序,它将查看数据集,从该集合中获取每n个点,并将其求和,并将其放入新的列表中。有了它,我可以制作一个简单的条形图。

现在我想为我的新列表计算一个离散均值。

我正在使用的公式是:t_av=(1/nsmp) Sum[N_i*t_i,{i,n_l,n_u}]
基本上我有有nsmp箱N_i在他们数,t_i是一箱的时间,n_l是第一个纸槽,n_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开始,我将无法得到正确的答案,因为我的第一个bin计算为0.如果我说range(1,len(L)+1)我将获得IndexError: list index out of range,因为这会搞乱L[i]*i的部分,因为他依然会乘第二(1)列表的元件1,然后他将一个条目为短的最后部分。

我该如何纠正?

1 个答案:

答案 0 :(得分:1)

您可以使用L[i]*(i+1)(假设您坚持使用从零开始的索引)。

但是,您也可以使用enumerate()将索引和值循环在一起,甚至可以提供1作为第二个参数,以便索引从1开始而不是{{ 1}}。

以下是我写这个的方法:

0

请注意,如果您使用的是Python 2.x且tsr = sum(x * i for i, x in enumerate(L, 1)) / len(L) 包含完全整数,则执行整数除法。要获取一个float,只需将其中一个参数转换为float(例如L)。您也可以使用float(len(L))