[英]optimally check combination of two random numbers and count occurs if they pass condition
我想检查通过特定条件的两个值的随机组合。 我构建了一个片段,它以某种方式起作用:
from random import random
i, n = 0, 100
for _ in range(n):
x = random()
y = random()
if x >= 0.5 and y >= 0.5:
i += 1
但我觉得我可以在这里更有效地处理(即变量 i、x、y 可以以某种方式省略)。 我什至认为列表理解可以进一步改善它,但我必须承认在创建这个时,我完全失败了。
我最接近的方法是这样的:
[lambda x,y: [random(), random()] for _ in range(n) if x >= 0.5 and y >= 0.5 ]
不幸的是,这造成了 100 次出现——看起来条件没有应用到我的 x、y 变量上。
看起来我仍然是 python 初学者,有人可以建议我,如何以最有效的方式做到这一点(最小的足迹将是这里的关键决定)。
使用sum()
function。
i = sum(random() >= 0.5 and random() >= 0.5 for _ in range(n))
布尔值可以被视为整数,其中True == 1
和False == 0
,因此总和是正确的。
通过使用不需要生成两个随机数并且可以结合它们的概率这一事实,您可以更快地接受答案:
p_1 = 0.5
p_2 = 0.5
p_combined = 1-(1-p_1)*(1-p_2)
sum(random() >= p_combined for _ in range(n))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.