我有一组数据点,我已经制作了一个程序,它将查看数据集,从该集合中获取每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,然后他将一个条目为短的最后部分。
我该如何纠正?
答案 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))
。