如何在python中生成随机数字序列?

时间:2016-05-13 14:31:02

标签: python random

如何生成1,2,3的随机序列,前提是80%的数字为1,15%为2,5%为3?

2 个答案:

答案 0 :(得分:7)

使用random在[0,1]中获取一个随机数,并将输出映射到该间隔。

from random import random

result = []

# Return 100 results (for instance)
for i in range(100):

    res = random()

    if res < 0.8:
        result.append(1)
    elif res < 0.95:
        result.append(2)
    else:
        result.append(3)

return result

这是一个简单的解决方案。您可能希望编写一个更优雅的版本,允许您在专用结构(列表,字典,...)中指定每个数字的概率,而不是在if / else语句中。

但是,如this answer中所述,您可能最好使用专用库。这是scipy的stats.rv_discrete

的一个例子
from scipy import stats
xk = np.arange(1, 4)
pk = (0.8, 0.15, 0.05)
custm = stats.rv_discrete(name='custm', values=(xk, pk))
# Return 100 results (for instance)
return custm.rvs(size=100)

答案 1 :(得分:1)

这应该可以解决问题

import random

sequence = []

desired_length = n # how many numbers you want
for i in range(desired_length):
    random_value = random.random()
    if random_value < .8:
        sequence.append(1)
    elif random_value < .95:
        sequence.append(2)
    else:
        sequence.append(3)

print sequence