python - AttributeError: 'set' 对象在调用 scipy 优化器时没有属性 'get'
问题描述
我正在尝试学习如何使用 Scipys 最小化器,但'set' object has no attribute 'get'
在执行时我不断收到错误消息。其余代码似乎工作正常,除了拟合线之外的所有内容都被绘制l_fit
。
很抱歉代码很长,但我不知道我可以删除什么来解决这个问题:
import pandas as pd
import matplotlib.pyplot as plt
import scipy.optimize as spo
import numpy as np
def error(line,data):
err = np.sum((data[:, 1] - (line[0] * data[:,0] + line[1])) ** 2)
return err
def fit_line(data, error_func):
# Generate initial guess for line model
l= np.float32([0, np.mean(data[:, 1])]) # slope = 0, intercept = mean( y values)
# Plot initial guess
x_ends = np.float32([-5, 5])
plt.plot(x_ends, l[0] * x_ends + l[1], 'm--', linewidth=2.0, label="Initial guess")
# Call optimizer to minimize error function
result= spo.minimize(error_func, l, args=(data,), method='SLSQP', options={'display=true'})
return result.x
def test_run():
# define original line
l_orig = np.float32([4, 2])
print("Original line: C0 = {}, C1 = {}".format(l_orig[0], l_orig[1]))
Xorig = np.linspace(0,10,21)
Yorig = l_orig[0] * Xorig + l_orig[1]
plt.plot(Xorig, Yorig, 'b--', linewidth=2.0, label='Original line')
# Generate noisy data points
noise_sigma= 3.0
noise= np.random.normal(0, noise_sigma, Yorig.shape)
data= np.asarray([Xorig, Yorig + noise]).T
print(data)
print(error)
plt.plot(data[:,0], data[:,1], 'go', label='Data points')
# Try to fit a line to this data
l_fit = fit_line(data, error)
print("Fitted line: C0 = {}, C1 = {}".format(l_fit[0], l_fit[1]))
plt.plot(data[:,0], l_fit[0] * data[:,0] + l_fit[1], 'r--', linewidth=2.0, label="Fitted line")
plt.show()
if __name__ == "__main__":
test_run()
这是我的错误回溯:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-86b5f3cac3d8> in <module>
56 # show plot
57 if __name__ == "__main__":
---> 58 test_run()
<ipython-input-12-86b5f3cac3d8> in test_run()
50
51 # Try to fit a line to this data
---> 52 l_fit = fit_line(data, error)
53 print("Fitted line: C0 = {}, C1 = {}".format(l_fit[0], l_fit[1]))
54 plt.plot(data[:,0], l_fit[0] * data[:,0] + l_fit[1], 'r--', linewidth=2.0, label="Fitted line")
<ipython-input-12-86b5f3cac3d8> in fit_line(data, error_func)
30
31 # Call optimizer to minimize error function
---> 32 result= spo.minimize(error_func, l, args=(data,), method='SLSQP', options={'display=true'})
33 return result.x
34
~/opt/anaconda3/envs/futures/lib/python3.8/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
544 # - return_all
545 if (meth in ('l-bfgs-b', 'tnc', 'cobyla', 'slsqp') and
--> 546 options.get('return_all', False)):
547 warn('Method %s does not support the return_all option.' % method,
548 RuntimeWarning)
AttributeError: 'set' object has no attribute 'get'
解决方案
问题是这条线
result= spo.minimize(error_func, l, args=(data,), method='SLSQP', options={'display=true'})
具体来说options={'display=true'}
,它是 set 类型set
,但minimize
需要类型dict
(根据文档)
可能你的意思是options={'display':True}
?
暗示:
print(type({'display=true'}))
print(type({'display':True}))
'display=true'
是单个字符串变量。大括号内的一个值或逗号分隔值{...}
是 的简写set
,例如a={1,2,3}
.
相反dict
,它是空括号{}
或逗号分隔的键值对,例如a={1:2, "a":"b"}
推荐阅读
- selenium -
通过添加图表自定义黄瓜报告(除了默认图表) - r - 如何使用 dplyr R 跨多个列应用汇总
- python - ImportError:DLL加载失败:在python中找不到指定的模块
- c++ - 累加器/在线百分位数计算(例如,使用升压累加器库)
- unit-testing - 开玩笑 - 没有找到测试
- android - 将 Firestore 文档转换为对象图
- javascript - Ant Design:如何在蚂蚁日历中只选择某个月份的日期?
- javascript - 在 React JS 中重试 useEffect
- shell - 一种存储 /home/$USER 以进行测试的方法
- python - Pygame 延迟问题