1

我需要对列表中的值进行归一化以产生(累积)概率分布,但目前我只是得到 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 是的,这些变量名有点笨。

4

2 回答 2

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]
于 2013-07-18T15:50:00.677 回答
1

当您的除法的两个部分是整数时,python 自动将结果四舍五入并使其成为整数,您需要使其中之一浮动。例如将“float(x/numtests)”更改为“float(float(x)/numtests)”

于 2013-07-18T15:52:37.767 回答