2

为一维问题调用 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]).)

我究竟做错了什么?

4

1 回答 1

2

这是一个 0 维数组,但它不应该是。虽然 0 维数组是 NumPy 中受支持的概念,但该minimize调用不应创建一个。看起来开发人员担心如果修复此问题会破坏向后兼容性,因此目前不太可能修复。

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

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

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

value = zero_d_array[()]
于 2018-02-12T20:30:54.740 回答