【问题标题】:Specifying the ranges in scipy.optimize.brute()在 scipy.optimize.brute() 中指定范围
【发布时间】:2017-07-28 15:46:40
【问题描述】:

当我尝试使用以下代码使用scipy.minimize.brute() 最小化函数时:

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

我收到以下错误:

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

我想这与范围的规范有关,但我不明白为什么。文档说

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

我的错误在哪里?

【问题讨论】:

    标签: python optimization scipy runtime-error


    【解决方案1】:

    正如文档所说:

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

    所以该函数需要一个元组的元组,每个维度的形式为(low, high)。你只有一个维度,所以在你的情况下正确的调用是

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

    【讨论】:

    • 嗯,这或多或少的定义,例如参见python tuples 的文档。只有一个元素的元组使用尾随逗号创建。否则会与数学表达式中的括号冲突。
    • 好的,现在我明白了。再次感谢!
    • 事实上,这里也可以使用列表而不是元组,例如ranges=[[-2,3]] 或两者的任意组合。
    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 2012-04-04
    • 2016-04-07
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多