它最终取决于您的模拟所代表的基础数据的性质。例如,如果您有某种类型的审查泊松过程,那么我将展示的内容将没有意义。
但是,一种方法是生成满足您条件的所有可能排列(这里最终有 627 个可能的排列满足 {10 选择 2} + {10 选择 3} ... + {10 选择 5})。然后你可以从更大的选择集中随机抽样。
import itertools as it
import numpy as np
np.random.seed(10)
# Lets create the whole sets of possible permutation lists
res = []
zr = np.zeros(10)
for i in range(2,6):
for p in it.combinations(range(10),i):
on = zr.copy()
on[list(p)] = 1
res.append(on.copy())
resnp = np.stack(res,axis=0)
# Now lets sample 1000 from this list
total_perms = resnp.shape[0]
samp = np.random.choice(total_perms,1000)
res_samp = resnp[samp]
# Check to make sure this is OK
np.unique(res_samp.sum(axis=1),return_counts=True)
如果您有观察到的数据,您可以从观察到的数据中生成概率,并将其输入到 的p
概率参数中np.random.choice
。
在这种情况下,10 选择 5 的排列比 10 选择 2 的排列要多,如果您希望这些类型的场景以相等的概率发生,您可以将10 选择 2 场景的概率总和设置为等于10选5。