我正在执行优化,以使用scipy.optimize库找到最合适的行到我生成的数据集。但我收到错误"不可用的类型:' numpy.ndarray'"
import numpy as np
import pandas as pd
import scipy.optimize as spo
import matplotlib.pyplot as plt
def error(data, line):
error=np.sum((data[:,1]-(line[0]*data[:,0]+line[1]))**2)
return error
def fit_line(data, error_func):
l=np.float32([0, np.mean(data[:,1])])
min_result=spo.minimize(error_func, l, args={data,}, method="SLSQP", options={"disp":True})
return min_result.x
if __name__=="__main__":
l_orig=np.float32([4,2])
xorig=np.linspace(0,10,21)
yorig=l_orig[1]*xorig + l_orig[0]
np.random.seed(788)
noise=np.random.normal(0, 3.0, yorig.shape)
data=np.asarray([xorig, yorig+noise]).T
result=fit_line(data, error)
答案 0 :(得分:4)
函数scipy.optimize.minimize
采用额外参数的元组,而不是集合。变化:
min_result=spo.minimize(error_func, l, args={data,}, method="SLSQP", options={"disp":True})
为:
min_result=spo.minimize(error_func, l, args=(data,), method="SLSQP", options={"disp":True})