规范化数字列表时,结果全为零

Tom*_*aly 1 python

我需要规范化列表中的值以产生(累积)概率分布,但是目前我只是将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]
Run Code Online (Sandbox Code Playgroud)

目前,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]
Run Code Online (Sandbox Code Playgroud)

如何让normcumsum包含cumsum/100?

N> B是的,这些变量名有点愚蠢.

nin*_*cko 6

x/numtests将始终返回0,很像1/2将始终返回0,因为您正在进行整数除法

你必须做float(x)/numtests或做:

from __future__ import division
Run Code Online (Sandbox Code Playgroud)

这只在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]
Run Code Online (Sandbox Code Playgroud)