У меня есть функция наименьших квадратов с полным ограничением, как указано ниже:
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 для следующего уравнения:у = b1 * a + b2 * b + b3 * cгде все суммы b равны единице и положительны: b1 + b2 + b3 = 1
Например, у меня есть два массива 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)
и Iполучим b1, b2, b3 в z.Однако я хотел бы передать список y в функцию с тем же x, чтобы получить набор (b1, b2, b3) для каждой строки в списке ниже y2.
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: индекс кортежа выходит за пределы диапазона
Как мне сделать это правильно?
Спасибо заранее.