scipy.optimize.minimize返回零维数组?

时间:2018-02-12 20:15:31

标签: python numpy scipy numpy-ndarray

为一维问题调用Powell最小化器会创建一个具有不可访问值的OptimizeResult。例如:

from scipy.optimize import minimize
test = minimize(lambda x: 1.0, np.array([1.0]), method="Powell")

如果我要求test.x我得到:

array(3.58792896)

“数组”出了点问题:我无法从中获取价值。例如,test.x[0]会返回IndexError: too many indices for array。这就像它是一个零维数组,或者还有其他一些参考问题。

(格式正确的ndarray会显示为array([3.58792896])。)

我做错了什么?

1 个答案:

答案 0 :(得分:2)

这是一个0维数组,但它不应该。虽然0维数组是NumPy中支持的概念,但minimize调用不应该创建一个。 It looks like the devs are worried about breaking backward compatibility if they fix this,所以现在不太可能修复。

我建议使用numpy.atleast_1d与返回1D数组的情况一致地处理此情况,并且如果最终更改返回值则向前兼容:

test = minimize(...)
if not test.success:
    handle_that()
result = np.atleast_1d(test.x)

对于您期望0D数组并想要检索存储值的情况,请使用0索引的元组对其进行索引:

value = zero_d_array[()]