完全约束最小二乘的向量化功能

时间:2018-09-06 21:34:23

标签: python vectorization least-squares

我有一个完全约束的最小二乘函数,如下所示:

def FullContraintUnmix(end, y):
    from scipy.optimize import minimize
    def loss(x):
        return np.sum(np.square((np.dot(x, end) - y)))

    cons = ({'type': 'eq',
         'fun': lambda x: np.sum(x) - 1.0})

    x0 = np.zeros(end.shape[0])
    res = minimize(loss, x0, method='SLSQP', constraints=cons,
               bounds=[(0, np.inf) for i in range(end.shape[0])], options={'disp': True})
    return res.x


该函数可以得出以下等式的b1,b2,b3:
y = b1 * a + b2 * b + b3 * c
其中所有b的总和为1且为正:b1 + b2 + b3 = 1

例如,我有两个numpy数组x和y并运行函数:

x=numpy.array([[1.09409701, 8.30291035, 7.55367133],
   [5.92192093, 6.70246926, 6.68206288],
   [7.7117292 , 1.26817188, 4.89139153]])
y=numpy.array([4.54848241, 9.40792865, 0.87531778])
z = FullContraintUnmix(x,y)

然后我将在z中得到b1,b2,b3。
但是,我想用相同的x向函数中馈入y列表,以为列表y2下面的每一行派生一个集合(b1,b2,b3)。

 y2 = nump.array([[4.54848241, 9.40792865, 0.87531778],
   [2.45441262, 9.36248009, 5.1424637 ],
   [3.93085281, 7.4927871 , 1.11965111]])

 vfunc = numpy.vectorize(FullContraintUnmix)
 z = vfunc(x, y2)

如何在不使用循环的情况下向量化函数?
我如上所述尝试,但得到:IndexError:元组索引超出范围

我应该如何正确做?

非常感谢。

0 个答案:

没有答案