如何找到等于x的不同长度数组的加权组合?

时间:2017-02-17 11:02:51

标签: python arrays numpy

我有两个不同长度的数组(a和b)。我也有一组权重,我需要找到等于x的a + b的加权组合。权重之和必须始终等于1.

我尝试了以下内容:

import numpy as np

a = np.arange(1.2, 1.7, 0.1)
b = np.arange(0.0, 0.9, 0.1)
x = 0.6
weights = np.arange(0.05, 1.05, 0.05)

a.resize(b.shape)

lw = []
for w in weights:
    for y in weights:
        np.where((w * a + y * b) == x, lw.append(w), np.nan)

这给了我一个20 * 20权重的列表,即所有权重。

我需要一个权重列表,其中:w * a + y * b = x

知道我怎么能这样做吗?

1 个答案:

答案 0 :(得分:1)

IIUC这是一种方法 -

$arr2

此处,前两列是sums = weights[:,None, None, None] * a[:,None] + weights[:,None,None]*b idx = np.argwhere(np.isclose(sums,x)) out_idx = idx[np.isclose(weights[idx[:,0]] + weights[idx[:,1]], 1)] 索引的组合,后两列分别是weightsa的索引。

验证给定样本 -

b