我有一个完全约束的最小二乘函数,如下所示:
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:元组索引超出范围
我应该如何正确做?
非常感谢。