我需要求解方程x + y + z = 1。
我需要生成x,y,z的所有可能组合,以便等式正确
我希望x,y,z的值在0.1到0.9之间,且跳跃值为0.1。
所以这些值限制为[0.1,0.2,...,0.8,0.9]
我找到了这个答案Finding all combinations of multiple variables summing to 1
但是它适用于R而不是python。
如果有人能启发我,那将非常有帮助。
答案 0 :(得分:2)
您可以考虑生成所有三胞胎,而不是嵌套的三重循环
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, y
和z
的可能值。
请注意,我在构建三元组时要乘以10,然后除以避免在直接执行操作时可能出现的舍入错误:
if x/10 + y/10 + z/10 == 1:
答案 1 :(得分:0)
最原始的解决方案是在所有组合上进行嵌套循环:
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())
答案 2 :(得分:0)
直接在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的三元组(元组)列表。