python 中条件合法的_Python中的条件“至少”,带有伪随机数

这是执行此操作的“正确”方法.在每种法律组合均具有同等可能性的意义上说正确.缺点是它比@BradSolomon的贵一点:

>>> def deviant_sep(N_D, N_N):

... Didx = np.random.choice(N_N-N_D, N_D, replace=False)

... out = np.zeros((N_N + N_D,), bool)

... out[Didx] = True

... Didx = np.flatnonzero(out[:N_N-N_D])

... out[Didx] = False

... out[Didx + np.arange(2, 2*N_D+2, 2)] = True

... return np.array(['N', 'D'])[out.view(np.int8)]

...

>>> deviant_sep(3, 8)

array(['N', 'N', 'D', 'N', 'N', 'N', 'N', 'D', 'N', 'N', 'D'],

dtype='

>>> deviant_sep(3, 8)

array(['N', 'N', 'D', 'N', 'N', 'N', 'N', 'D', 'N', 'N', 'D'],

dtype='

>>> deviant_sep(3, 8)

array(['N', 'N', 'D', 'N', 'N', 'N', 'D', 'N', 'N', 'D', 'N'],

dtype='

>>>

>>> from timeit import repeat

>>> repeat('deviant_sep(1000, 8000)', globals=globals(), number=1000)

[0.2079479000531137, 0.20392047404311597, 0.20519483496900648]

说明:我怀疑使这种变慢的原因是numpy的选择没有替换功能,我认为它会生成完整的排列,然后将其截断.

该方法的工作原理如下:我们可以通过在每个D之前删除2个Ns,将具有nD Ds和nN Ns的合法模式映射到具有nD Ds和nN-2 nD Ns的模式,然后通过插入2来将后者的任何模式转换为合法模式每个D之前的Ns.此映射为1比1.无约束的模式我们知道如何以相等的概率绘制.因此,我们这样做,然后通过在每个D之前插入2 N来映射到合法模式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值