从每个列表中选择一个项目,最多N个组合,均匀分布

2024-03-28 10:45:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有100个列表[x1..x100],每个列表包含大约10个项目[x_i_1,...x_i_10] 我需要生成80个向量。每个向量都是所有列表的产物,有点像itertools.product(*x),除了两件事:

(一) 我需要每个向量中的每一项都有一个均匀分布。 例如: [ np.random.choice(xi) for xi in [x1..x100]]会很好,除了我的情况:

(二) 我不能重复。 itertools.product解决了这个问题,但它不满足条件(1)

我需要生成80个向量,使用它们,然后重新请求另一个80,并重复这个过程,直到满足某个条件。 对于所有80个大小批次的每个向量,我需要它们是一致的(条件1)和不重复的(条件2)

创建所有排列并洗牌列表对于较小的列表是一个很好的解决方案,我使用这个批处理系统是因为有大量可能的排列

有什么想法吗? 泰铢


Tags: 项目列表fornprandomproduct条件向量
1条回答
网友
1楼 · 发布于 2024-03-28 10:45:54

只需使用[np.random.choice(xi) for xi in [x1..x100]]。同一个向量在80次试验中产生两次的概率非常小。根据birthday problem,独立于一组d项选择的n项将包含所选择的重复项的概率约为1 - exp(n*(n-1)/(2*d))。在你的例子中n = 80d = 10**100。由此产生的概率是0到小数点后位数大得离谱(估计意味着概率从0.000开始。。。小数点后约有1.37 x 10^97个零)。忘了80吧,你可以生成80万亿个这样的向量,但是生成同一个向量两次的概率仍然非常小

相关问题 更多 >