首页 > 解决方案 > 不懂 scipy.optimize.brute 语法

问题描述

我根本不明白的语法scipy.optimize.brute。如果我有一个列表,比如说[-1, 0, 1],和一个单变量函数x**2,我如何让它最小化该列表?我已经阅读了文档,但我不知道该传递什么。元组不起作用,列表也不起作用,而且我不知道“切片对象”是什么,也不知道为什么要为此传递两个切片对象。

MWE:

import scipy.optimize as spopt

def f(x):
    return x**2

print(spopt.brute(f, ([-1, 0, 1])))

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

标签: pythonscipy

解决方案


scipy.optimize.brute 在给定范围内最小化函数。
该错误取决于您传递ranges参数的方式。如文档中所述:

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

这里举个例子。

>>> res = spopt.brute(func=f, ranges=(slice(-1,2,1),), full_output=True)
>>> res
(array([ 0.]), 0.0, array([-1,  0,  1]), array([1, 0, 1]))
>>> res[0]
array([ 0.]) # global minimum
>>> res[1]
0.0 # function value at global minimum

推荐阅读