最小化(Python/scipy)之后,我想知道如何在结果中找到未使用的变量。这是一个简单的示例,其中第三个变量保持不变。除了比较初始值与结果之外,是否有更好的方法来识别此类变量?
from scipy.optimize import minimize
def objective(x):
return -x[0] - x[1]
x0 = 0, 0, 1.234
res = minimize(objective, x0,
bounds = ([-10,+10], [-10,+10], [-10,+10]))
print(res.x)
# output: [10. 10. 1.234]
# res.x[2] has been left untouched compared to x0[2]
OptimizeResult
(scipy.optimize.minimize
的返回对象)包含雅可比行列式(jac
)。雅可比行列式中 0 的点对应于对结果没有影响的变量。您可以使用以下行检查它们的位置:
np.where(np.isclose(res.jac, 0.))[0]
在此示例中,它返回
np.array([2])
,因为 x[2]
对优化没有影响。