我需要对列表中的值进行规范化以产生(累积)概率分布,但是目前我只是得到0。
这就是我正在做的事情:
tests = []
#some code to populate tests which simulates
count = [x[0] for x in tests]
found = [x[1] for x in tests]
found.sort()
num = Counter(found)
freqs = [x for x in num.values()]
cumsum = [sum(item for item in freqs[0:rank+1]) for rank in xrange(len(freqs))]
normcumsum = [float(x/numtests) for x in cumsum]
目前,cumsum和normcumsum是:
cumsum = [1, 2, 6, 12, 28, 39, 64, 85, 96, 98, 99, 100]
normcumsum = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]
如何让normcumsum包含cumsum / 100?
N> B是的,这些变量名称有点愚蠢。
答案 0 :(得分:6)
x/numtests
将始终返回0,就像1/2
将始终返回0一样,因为您正在进行整数除法
您必须float(x)/numtests
,或执行:
from __future__ import division
这只在python2中有用,而不是python3。
演示:
>>> [1/2, 3/2, 5/2]
[0, 1, 2]
>>> from __future__ import division
>>> [1/2, 3/2, 5/2]
[0.5, 1.5, 2.5]
答案 1 :(得分:1)
当你的除法的两个部分是整数时,自动python舍入结果并使其成为整数,你需要使其中一个浮点数。例如,将“float(x / numtests)”更改为“float(float(x)/ numtests)”