Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy fmin“slsqp错误”;转换第八个参数“g';“从slsqp.slsqp到C/Fortran数组”;_Python_Optimization_Numpy_Scipy - Fatal编程技术网

Python Scipy fmin“slsqp错误”;转换第八个参数“g';“从slsqp.slsqp到C/Fortran数组”;

Python Scipy fmin“slsqp错误”;转换第八个参数“g';“从slsqp.slsqp到C/Fortran数组”;,python,optimization,numpy,scipy,Python,Optimization,Numpy,Scipy,我见过这个问题或其他问题的变体,例如 但是他们并没有真正使用一个简单的可破解的示例代码。也没有任何真正的答案(可能是因为缺少问题的简单演示) 问题是,当尝试使用scipy.optimize fmin_slsqp方法拟合函数时,您会得到这个非常不透明的错误 “未能将_slsqp.slsqp的第8个参数'g'转换为C/Fortran数组” 在下面的代码中,我使用leastsq方法将线性函数拟合到随机相关数据。从.docs中,我看不出同样的语法不应该使用fmin_slsqp做同样的事情,但事实并非

我见过这个问题或其他问题的变体,例如

但是他们并没有真正使用一个简单的可破解的示例代码。也没有任何真正的答案(可能是因为缺少问题的简单演示)

问题是,当尝试使用scipy.optimize fmin_slsqp方法拟合函数时,您会得到这个非常不透明的错误

“未能将_slsqp.slsqp的第8个参数'g'转换为C/Fortran数组”

在下面的代码中,我使用leastsq方法将线性函数拟合到随机相关数据。从.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))

当目标函数返回的不是标量时,我会得到相同的错误。导致此错误的最小示例是

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)
我认为这要么是一个bug,要么应该有更清晰的错误信息。我提出了一个建议

更新:

现在已通过解决此问题,以给出明确的错误消息

"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())

这个bug似乎是围绕着响应的
type()
定位的。

可能是个bug吗?我也收到了错误信息。