【发布时间】:2016-05-13 14:31:01
【问题描述】:
如果 80% 的数字为 1、15% 为 2、5% 为 3,如何生成 1、2、3 的随机序列?
【问题讨论】:
如果 80% 的数字为 1、15% 为 2、5% 为 3,如何生成 1、2、3 的随机序列?
【问题讨论】:
使用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 行的末尾不应该有一个冒号吗?
这应该可以解决问题
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
【讨论】: