我有两个不同长度的数组(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
知道我怎么能这样做吗?
答案 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)]
索引的组合,后两列分别是weights
和a
的索引。
验证给定样本 -
b