Python 确保所有2**N组合以N个布尔值的M个随机输出生成
在下面的示例中,M=10和N=2,并且由于M远大于2**N,因此概率是,在本示例中,N个布尔值(真、真、(真、假)、(假、真)、(假、假)的每个可能组合将在M个输出中至少生成一次,如下所述Python 确保所有2**N组合以N个布尔值的M个随机输出生成,python,numpy,random,Python,Numpy,Random,在下面的示例中,M=10和N=2,并且由于M远大于2**N,因此概率是,在本示例中,N个布尔值(真、真、(真、假)、(假、真)、(假、假)的每个可能组合将在M个输出中至少生成一次,如下所述 for _ in range(10): ... choice1 = np.random.choice((True, False)) ... choice2 = np.random.choice((True, False)) ... print(choice1, choice2) ...
for _ in range(10):
... choice1 = np.random.choice((True, False))
... choice2 = np.random.choice((True, False))
... print(choice1, choice2)
...
False False
False False
True False
True False
True True
False True
True True
True True
True False
False False
但这并不能保证。获得10 X(假,假)或10 X(真,真)的概率很低,或者可能是一对特定组合(比如假,真)从未出现的情况
在“现实生活”中,打印内容被收益率报表取代,choice1
和choice2
伴随着其他几个随机生成的数字变量
我如何轻松地更改选项1
和选项2
的生成,以确保它们始终覆盖所有4种可能性,同时仍然保持(大部分)随机性,而不只是添加4个额外的非随机情况来强制发生
我觉得可以利用“选择而不替换”选项,但我想不出如何合并此选项。如果您想确保在leat中使用每个可能的组合,那么您可以首先创建一个包含所有可能组合的列表,然后随机弹出(拾取并删除)一个元素。当列表为空时,您可以重新创建它 缺点是不能在弹出的所有元素之前两次获得相同的元素 以下代码似乎可以完成此任务:
随机导入
导入副本
来自itertools进口产品
M=10
N=2
#首先生成所有可能的组合:
所有组合\u ref=产品([正确,错误],重复=N)
所有组合=列表(复制。复制(所有组合参考))
#现在随机弹出一个元素:
对于范围内的i(M):
如果len(所有_组合)==0:
所有组合=列表(复制。复制(所有组合参考))
打印(所有组合.pop(random.randint(0,len(所有组合)-1)))
希望这会对您有所帮助。如果您想确保在leat中使用每个可能的组合,您可以先创建一个包含所有可能组合的列表,然后随机弹出(拾取并删除)一个元素。当列表为空时,您可以重新创建它 缺点是不能在弹出的所有元素之前两次获得相同的元素 以下代码似乎可以完成此任务:
随机导入
导入副本
来自itertools进口产品
M=10
N=2
#首先生成所有可能的组合:
所有组合\u ref=产品([正确,错误],重复=N)
所有组合=列表(复制。复制(所有组合参考))
#现在随机弹出一个元素:
对于范围内的i(M):
如果len(所有_组合)==0:
所有组合=列表(复制。复制(所有组合参考))
打印(所有组合.pop(random.randint(0,len(所有组合)-1)))
希望这能对你有所帮助。这个答案正是我想要的。它没有来自R Liab的一个缺点,尽管这有助于——谢谢——导出这个
import numpy as np
from itertools import product
N = 2
M = 10
possibles = product((True, False), repeat=N)
selection_pool = list(possibles)
not_yet_used = set(selection_pool)
m2go = M
while m2go > 0:
if m2go <= len(not_yet_used):
selection_pool = list(not_yet_used)
used = selection_pool[np.random.choice(len(selection_pool))]
not_yet_used.discard(used)
print(*used)
m2go -= 1
将numpy导入为np
来自itertools进口产品
N=2
M=10
可能性=产品((真,假),重复=N)
选择池=列表(可能)
尚未使用=设置(选择池)
m2go=M
当m2go>0时:
如果m2go这个答案正是我想要的。它没有来自R Liab的一个缺点,尽管这有助于——谢谢——导出这个
import numpy as np
from itertools import product
N = 2
M = 10
possibles = product((True, False), repeat=N)
selection_pool = list(possibles)
not_yet_used = set(selection_pool)
m2go = M
while m2go > 0:
if m2go <= len(not_yet_used):
selection_pool = list(not_yet_used)
used = selection_pool[np.random.choice(len(selection_pool))]
not_yet_used.discard(used)
print(*used)
m2go -= 1
将numpy导入为np
来自itertools进口产品
N=2
M=10
可能性=产品((真,假),重复=N)
选择池=列表(可能)
尚未使用=设置(选择池)
m2go=M
当m2go>0时:
如果你去