我想通过下表制作频率表。
编号1 2 4 6总和
0.4频率0.25 0.15 0.2 1
我写了下面的代码。
import random
from collections import Counter
number = [1, 2, 4, 6]
probability = [0.4, 0.25, 0.15, 0.2]
def Cdf(p):
y_cdf = []
s = 0
n = len(p)
for i in range(0, n):
s = s + p[i]
y_cdf.append(s)
return y_cdf
def rand_G(p):
q = random.uniform(0, 1)
n = len(p)
c = Cdf(p)
for i in range(0, n):
if q <= c[i]:
return i
def rand2_G(p, n):
a = []
for i in range(n):
a.append(rand_G(p))
return a
def Table(a):
c = Counter(a)
pair = c.most_common()
pair.sort()
print('Number\tFrequency')
for x in pair:
print('{0}\t{1}'.format(x[0], x[1]))
data = rand2_G(probability, 10000)
Table(data)
但结果是 号码频率 0 3990 1 2495 2 1521 3 1994年
上表中,数字不是1,2,4,6。
如何制作数字1,2,4,6(数字列表上方)的频率表?
答案 0 :(得分:3)
从python 3.6开始,有similar example:
Reference
返回从人口中选择的k大小的元素列表 替换。如果填充为空,则引发IndexError。如果指定了权重序列,则根据选择进行选择 相对权重。或者,如果cum_weights序列是 如果给定,则根据累积权重进行选择 (可能使用itertools.accumulate()计算)。例如, 相对权重[10,5,30,5]等于累积 重量[10,15,45,50]。在内部,相对权重是 在做出选择之前转换为累积权重,因此提供 累积权重可以节省工作量。
如果既未指定权重也未指定cum_weights,则进行选择 概率相等。如果提供了权重序列,则必须是 与人口序列长度相同。这是一个TypeError 指定权重和cum_weights。
权重或cum_weights可以使用任何可互操作的数字类型 使用random()返回的浮点值(包括整数, 浮点数和分数但不包括小数。)