我发布这个问题答案是因为这个细节很微妙,我只是偶然发现了解决方案,因为有人在a Stack Overflow答案中定义了他们的切片对象的特定方式,如果有人搜索这个特定的错误,可能不会出现。
我的原始代码:
from scipy.optimize import brute
f = lambda x : x
ranges = ( slice(-10,10,1) )
result = brute( f, ranges, full_output=True, finish=optimize.fmin )
print( result[1] )
错误,如问题标题所示:
TypeError: object of type 'slice' has no len()
新代码仅在定义范围的元组中多包含一个逗号
from scipy.optimize import brute
f = lambda x : x
ranges = ( slice(-10,10,1), )
result = brute( f, ranges, full_output=True, finish=optimize.fmin )
print( result[1] )
输出:
-6.33825300114115e+29
为什么输出远小于 -10 的答案在不同的 Stack Overflow 帖子中得到了回答。
如问题中所述,工作代码需要在 slice(-10,10,1) 后添加逗号。
from scipy.optimize import brute
f = lambda x : x
ranges = ( slice(-10,10,1), )
result = brute( f, ranges, full_output=True, finish=optimize.fmin )
print( result[1] )