繁体   English   中英

如何生成总和为 1 的三个变量的所有可能组合

[英]How to generate all the possible combinations of three variables that sum to 1

我需要解方程 x + y + z = 1。

我需要生成 x, y, z 的所有可能组合,所以方程是正确的

我希望 x、y、z 的值在 0.1 和 0.9 之间,跳跃为 0.1。

所以这些值被限制为 [0.1, 0.2, ..., 0.8, 0.9]

我找到了这个答案查找总和为 1 的多个变量的所有组合

但是它适用于 R 而不是 python。

如果有人能启发我,那将非常有帮助。

您可以考虑生成所有三元组,而不是嵌套的三元组

triplets = [(x/10.0, y/10.0, (10-x-y)/10.0) for x in range(1,9) for y in range(1,10-x)]

其中每个三元组(a,b,c)表示要分配给x, yz的可能值。

请注意,我在构建三元组时乘以 10 然后进行除法,以避免直接执行时可能出现的舍入错误:

if x/10 + y/10 + z/10 == 1:

最原始的解决方案是对所有组合进行嵌套循环:

def variable_combinations(sum_up_to=1):
    for x in range(1, 10):
        for y in range(1, 10):
            for z in range(1, 10):
                if x/10 + y/10 + z/10 == sum_up_to:
                    yield (x/10, y/10, z/10)

all_solutions = list(variable_combinations())

直接在python中避免嵌套循环:

import itertools
import numpy as np
x = y = z = [ i/10 for i in range(1,10)]

p = itertools.product(x,y,z)
combs = [e for e in p if np.sum(e) == 1]

现在combs是总和为 1 的三元组(元组)列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM