AttributeError:'元组'对象没有属性' ravel'

时间:2017-04-13 11:11:59

标签: python numpy optimization scipy

我试图使用scipy.optimize.brute函数

求解两个同时发生的非线性方程
import numpy as np
import scipy.optimize as so

def root2d(x,a,b):
   F1 = np.exp(-np.exp(-(x[0]+x[1]))) - x[1]*(b+x[0]**2)
   F2 = x[0]*np.cos(x[1]) + x[1]*np.sin(x[0]) - a
   return (F1,F2)

a = 0.5
b = 1

x0 = np.array([-0.1,0.1]) # initial guesses

rranges = (slice(-4,4,0.2),slice(-4,4,0.2))
print(so.brute(root2d,rranges,args=(a,b),finish=so.fmin))

我收到一个我不明白的错误:AttributeError: 'tuple' object has no attribute 'ravel'。这是什么意思,我如何修复我的代码(如果可能的话)?

修改完整错误消息

Traceback (most recent call last):

  File "<ipython-input-2-29b9507fcb99>", line 1, in <module>
    runfile('.../test')

  File "C:\WinPython\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

  File "C:\WinPython\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "../test.py", line 111, in <module>
    print(so.brute(root2d,rranges,args=(a,b),finish=so.fmin))

  File "C:\WinPython\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\scipy\optimize\optimize.py", line 2711, in brute
    indx = argmin(Jout.ravel(), axis=-1)

AttributeError: 'tuple' object has no attribute 'ravel'

1 个答案:

答案 0 :(得分:2)

你返回2个变量F1和F2并使用单个变量obj来表达它们。(比如)这就是所谓的元组obj,它与2个值相关联,即F1和F2的值。因此,在列表中使用索引按顺序获取所需的值。