如何生成1,2,3的随机序列,前提是80%的数字为1,15%为2,5%为3?
答案 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