Python频率表

时间:2017-10-25 14:09:09

标签: python python-3.x loops frequency

我想通过下表制作频率表。

编号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(数字列表上方)的频率表?

1 个答案:

答案 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()返回的浮点值(包括整数,   浮点数和分数但不包括小数。)