TypeError:使用sop.brute时,类型为'int'的对象没有len()

时间:2018-05-18 06:36:42

标签: python scipy python-3.6

我使用的是Python3.6,很长一段时间我一直对这个问题感到困惑。所以这是我的代码。

def fo(x,y):
    z=np.sin(x)+0.05*x**2+np.cos(y)+0.05*y**2
    if output == True:
        print("%8.4f %8.4f %8.4f" % (x,y,z))
        return z

import scipy.optimize as sop

sop.brute(fo,(-10,10.1,5),(-10,10.1,5),finish = None)

这是我得到的错误:

Traceback (most recent call last):

  File "<ipython-input-12-c7886e35ff4b>", line 1, in <module>
    sop.brute(fo,(-10,10.1,5),(-10,10.1,5),finish = None)

  File "C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 2811, in brute
    if len(lrange[k]) < 3:

TypeError: object of type 'int' has no len()

这是另一次尝试:

r1=slice(-10,10.1,5)

r2=slice(-10,10.1,5)
sop.brute(fo,r1,r2,finish = None)

和错误:

Traceback (most recent call last):

  File "<ipython-input-48-230c07265998>", line 1, in <module>
    sop.brute(fo,r1,r2,finish = None)

  File "C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 2804, in brute
    N = len(ranges)

TypeError:'slice'类型的对象没有len()

sop.brute(fo,(r1,r2),finish = None)

TypeError: fo() missing 1 required positional argument: 'y'

我是新来的,对不起,如果我问一个愚蠢的问题,但我不能把它解决掉T.T thx很多

1 个答案:

答案 0 :(得分:0)

def fo(p):
    x, y = p
    z = np.sin(x)+0.05*x**2+np.sin(y)+0.05*y**2
    if output == True:
        print('%8.4f %8.4f %8.4f' % (x,y,z))
    return z

像代码一样解压元组