使用多个范围的数字,所有可能组合的输出数组加和为1.0

时间:2018-12-12 19:33:35

标签: python

我有以下数组,它们代表我想探索的数字范围:

cpx_var = np.linspace(0.20,0.80,61)
horn_var = np.linspace(0.20,0.80,61)
plag_var = np.linspace(0.2,0.7,6)
mag_var = np.linspace(0.2,0.6,5)

我想从每个数组中调用一个数字,这样4个数字总和为1.0。我希望输出一个数组或数据框,其中包含所有可能的组合(在给定我感兴趣的范围内)总计为1.0(形式4 x n,其中n是不同组合的数量)。

我对下一步的工作感到迷茫。我看了'permutations()'函数,但我认为它在这里不起作用。我希望这是对我要完成的工作的足够清晰的描述。

谢谢!

扎克

2 个答案:

答案 0 :(得分:1)

这应该有所帮助:

import numpy as np

cpx_var = np.linspace(0.20,0.80,61)
horn_var = np.linspace(0.20,0.80,61)
plag_var = np.linspace(0.2,0.7,6)
mag_var = np.linspace(0.2,0.6,5)

a = [(i, j, k, w) for i in cpx_var for j in horn_var for k in plag_var for w in mag_var if i+j+k+w == 1.0]

a是一个4长度元组的列表,其和为1。您可以将其转换为numpy数组。每个元组每个数组都有一个元素。

答案 1 :(得分:0)

您可以使用itertools.product

from itertools import product

result = [p for p in product(cpx_var, horn_var, plag_var, mag_var) if sum(p) == 1.0]