Ошибка Scipy fmin_slsqp "не удалось преобразовать 8-й аргумент` g 'в _slsqp.slsqp в массив C / Fortran "

Я видел этот вопрос или вариант, заданный в другом месте, например

Ошибка Scipy с использованием модуля оптимизации. Ошибка преобразования массива в fortran

http://numpy-discussion.10968.n7.nabble.com/minimize-Algorithmen-Problem-with-boundarys-td37709.html

Но на самом деле они не содержат простой примерный код для взлома. Также нет реальных ответов (возможно, из-за отсутствия простой демонстрации проблемы).

Проблема в том, что при попытке установить функцию с помощью метода scipy.optimise fmin_slsqp вы получите эту довольно непрозрачную ошибку

"не удалось преобразовать 8-й аргумент` g '_slsqp.slsqp в массив C / Fortran "

В приведенном ниже коде я прикладываю линейную функцию к случайным коррелированным данным с использованием метода наименьших квадратов. Из .docs я не вижу причин, что один и тот же синтаксис не должен делать то же самое с помощью fmin_slsqp, но это не так.

Кто-нибудь знает, почему?

import numpy as nm from scipy.optimize import leastsq, fmin_slsqp import matplotlib.pyplot as plt # residuals of linear function def res(params,x,y_real): y_fit = params[0] +x*params[1] res = y_fit-y_real return res #generate correlated data xx = nm.array([-0.51, 51.2]) yy = nm.array([0.33, 51.6]) means = [xx.mean(), yy.mean()] stds = [xx.std() / 3, yy.std() / 3] corr = 0.8 # correlation covs = [[stds[0]**2 , stds[0]*stds[1]*corr], [stds[0]*stds[1]*corr, stds[1]**2]] m = nm.random.multivariate_normal(means, covs, 100) x = m[:,0] y = m[:,1] # Initial values of parameters initvals = [0,0] fit1,j = leastsq(res, initvals, args=(x,y)) #Plot fit 1 y_fit = fit1[0] + fit1[1]*x plt.scatter(x,y) plt.plot(x,y_fit) plt.show() fit2 = fmin_slsqp(res, initvals, args=(x,y)) 

2 Solutions collect form web for “Ошибка Scipy fmin_slsqp "не удалось преобразовать 8-й аргумент` g 'в _slsqp.slsqp в массив C / Fortran "”

Я получаю ту же ошибку, когда возврат из функции Objective не является скаляром . Минимальным примером, который вызывает эту ошибку, является

 from scipy.optimize import fmin_slsqp def fn(x): return [0.,1.] x = [0, 1., 2.] minsoln = fmin_slsqp(fn, x) 

в то время как следующее не вызывает ошибку,

 from scipy.optimize import fmin_slsqp def fn(x): return 0. x = [0, 1., 2.] minsoln = fmin_slsqp(fn, x) 

Я думаю, что это либо ошибка, либо должно быть более четкое сообщение об ошибке. Я поднимаю вопрос .

ОБНОВИТЬ:

Это было разрешено b-carter, чтобы дать ясное сообщение об ошибке,

 "Objective function must return a scalar" 

с обновленной документацией см. эту тему для обсуждения.

Привет, у меня была такая же ошибка со следующим:

 def ptf_returns(weights,returns): return pd.DataFrame(np.array(returns).T*(weights)).T.mean().mean() 

Когда я добавляю следующее, он работает:

 def ptf_returns(weights,returns): return float(pd.DataFrame(np.array(returns).T*(weights)).T.mean().mean()) 

Кажется, что ошибка ориентирована вокруг type() ответа.

  • Scipy: Ускорение вычисления комплексного интеграла 2D
  • Поиск расчета, которое генерирует NaN
  • scipy и сохраняющий файл мата (файл данных .mat matlab)
  • Ошибка импорта: нет модуля с именем numpy
  • Является ли порядок словаря Python гарантированным за итерации?
  • Обрезка дендрограммы на уровнях в Scipy Hierarchical Clustering
  • Скупистая редкая кончина
  • Получение ошибки "не может передавать входной массив из формы (252,4) в форму (4)" в оптимизации
  • Python - лучший язык программирования в мире.