Функция векторизации полностью ограниченного наименьшего квадрата - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть функция наименьших квадратов с полным ограничением, как указано ниже:

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: индекс кортежа выходит за пределы диапазона

Как мне сделать это правильно?

Спасибо заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...