生成两个平方和== 1的随机数

sha*_*dam 3 python random geometry numpy

嗨,我想生成两个随机数,以使它们的平方和等于1。

我已经写了这段代码。它们的平方和可能不完全等于1,但应该接近0.999。我也用过,if(math.isclose(abs(gene_value_1)**2 + abs(gene_value_2)**2, 1))但是不起作用。

gene_value_1 = random.uniform(0, 1)
gene_value_2 = random.uniform(0, 1)
if(abs(gene_value_1)**2 + abs(gene_value_2)**2) == 1:
    print(added)
Run Code Online (Sandbox Code Playgroud)

我想生成两个随机数,其平方和几乎等于1。

Mad*_*ist 8

您的要求实际上不是两个不同的数字。它用于一对平方和等于1的数字。

如果x**2 + y**2 = 1,然后y由整体确定xy = sqrt(1 - x**2)

gene_value_1 = random.uniform(0, 1)
gene_value_2 = math.sqrt(1.0 - gene_value_1**2)
Run Code Online (Sandbox Code Playgroud)

正如对问题和答案的评论中所提到的那样,以这种方式获得的分布相对于两个数字而言是不均匀的。由于gene_value_1并且gene_value_2在统一情况下将描述笛卡尔空间中的单位圆,因此您可以

angle = random.uniform(0, 2 * math.pi)
gene_value_1 = math.cos(angle)
gene_value_2 = math.sin(angle)
Run Code Online (Sandbox Code Playgroud)

  • 尽管这可以满足所要求的问题,但值得注意的是,所得分布在x和y之间是不对称的。大多数情况下,gene_value_2会大于gene_value_1(1 / sqrt(2)〜0.71) (2认同)