我有以下数组,它们代表我想探索的数字范围:
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()'函数,但我认为它在这里不起作用。我希望这是对我要完成的工作的足够清晰的描述。
谢谢!
扎克
答案 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]