【问题标题】:How to generate random sequence of numbers in python?如何在python中生成随机数字序列?
【发布时间】:2016-05-13 14:31:01
【问题描述】:

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

【问题讨论】:

标签: python random


【解决方案1】:

使用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)

【讨论】:

  • 我打算只发布这个答案
  • elif 行的末尾不应该有一个冒号吗?
  • pk = (0.8, 0.15, 0.05) 还是你的变种?
  • 你是对的。固定的。该文档说“(xk,pk),其中xk是具有非零概率pk且总和(pk)= 1的整数。”
【解决方案2】:

这应该可以解决问题

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多