大于人口的样本的python随机样本

标签 python random

我有一个整数列表,代表 60 天内每天提交的申请数量。我需要随机生成一个包含 288 个整数的列表,这些整数总和为每天的申请数量。我有以下代码:

import random as r

issued = [1000,200,344...]
def random_sum_to(n, num_terms = None):
    num_terms = (num_terms or r.randint(2, n)) - 1
    a = r.sample(range(1, n), num_terms) + [0, n]
    list.sort(a)
    return [a[i+1] - a[i] for i in range(len(a) - 1)]

for i in issued:
    print(random_sum_to(i,288))

发布的是整数列表,是每天提交的应用程序的总和。此代码适用于大于 288 的数字,但适用于小于 288 的数字。阅读此处我看到应该使用 random.choice,但我无法弄清楚如何正确实现它。查看结果,似乎从未打印过 0,因此这显然是问题的潜在来源。有什么建议吗?

最佳答案

坦率地说,所有这些 zip 内容、列表理解等可能看起来很聪明,但你为什么不使用 Multinomial sampling

实际上,根据定义,总和自动等于 N

import numpy as np

t = np.random.multinomial(200, [1/288.]*288, size=1) # sample 288 numbers summed to 200
print(t)
print(sum(t[0]))

t = np.random.multinomial(1000, [1/288.]*288, size=1) # sample 288 numbers summed to 1000
print(t)
print(sum(t[0]))

关于大于人口的样本的python随机样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52426195/

相关文章:

python - 在 PyQt 中,如何将终端嵌入到窗口中?

python - 如何用 HTML 标记显示文本? (我使用ckeditor)

python - Dropbox Python SDK SSL 错误

c++ - 随机生成数组中固定范围的数字,该二维数组中没有重复的行

c - 如何避免牌组出现重复

java - 如何在 2D 平面上随机生成一堆站点,它们之间的空间量大致相同?

python - 在 Python-Eve 中设置 MongoDB 授权配置

python - Pandas 过滤器计数

r - 为什么 tempdir() 在 fork 集群的每个核心上给出相同的结果?

random - 为 64 位 LCG 找到更多独立的种子值(MMIX(由 Knuth))