Python 在scipy.optimize.brute()中指定范围

Python 在scipy.optimize.brute()中指定范围,python,optimization,scipy,runtime-error,Python,Optimization,Scipy,Runtime Error,当我尝试使用以下代码最小化函数时: import scipy scipy.optimize.brute(lambda x: x**2, ranges=(-2,3)) 我得到以下错误: TypeError: object of type 'int' has no len() 我想这与范围的规格有关,但我不明白为什么。文件上说 范围元组的每个组件必须是“切片对象”或形式(低、高)的范围元组 我的错误在哪里?如文档所述: 范围元组的每个组件必须是“切片对象”或形式(低、高)的范围元组 因此,函数需

当我尝试使用以下代码最小化函数时:

import scipy
scipy.optimize.brute(lambda x: x**2, ranges=(-2,3))
我得到以下错误:

TypeError: object of type 'int' has no len()
我想这与范围的规格有关,但我不明白为什么。文件上说

范围元组的每个组件必须是“切片对象”或形式(低、高)的范围元组


我的错误在哪里?

如文档所述:

范围元组的每个组件必须是“切片对象”或形式(低、高)的范围元组

因此,函数需要一个元组的元组,每个维度的元组形式为
(低、高)
。您只有一个维度,因此在您的情况下正确的调用是

scipy.optimize.brute(lambda x: x**2, ranges=((-2,3),) )

根据定义,这或多或少是这样的,例如,参见的文档。只有一个元素的元组是使用尾随逗号创建的。否则它会和数学表达式中的括号冲突。好了,现在我明白了。再次感谢!事实上,这里也可以用列表代替元组,例如
ranges=[-2,3]]
或两者的任意组合。