scipy.optimize.minimize 返回零维数组?
scipy.optimize.minimize returning zero-dimensional array?
为一维问题调用 Powell 最小化器正在创建一个 OptimizeResult
具有不可访问的值。例如:
from scipy.optimize import minimize
test = minimize(lambda x: 1.0, np.array([1.0]), method="Powell")
如果我要求 test.x
我得到:
array(3.58792896)
有问题"array":我无法从中获取价值。例如,test.x[0]
returns IndexError: too many indices for array
。好像是零维数组,或者是其他引用问题。
(格式正确的 ndarray
会显示为 array([3.58792896])
。)
我做错了什么?
那是一个 0 维数组,但它不应该是。虽然 0 维数组是 NumPy 中受支持的概念,但 minimize
调用不应该创建一个。 It looks like the devs are worried about breaking backward compatibility if they fix this,因此目前不太可能修复。
我建议使用 numpy.atleast_1d
来处理这种情况,与 return 一维数组的情况一致,并且如果它们最终改变了 return 值,则向前兼容:
test = minimize(...)
if not test.success:
handle_that()
result = np.atleast_1d(test.x)
对于您期望 0D 数组并想要检索存储值的情况,使用 0 索引的元组对其进行索引:
value = zero_d_array[()]
为一维问题调用 Powell 最小化器正在创建一个 OptimizeResult
具有不可访问的值。例如:
from scipy.optimize import minimize
test = minimize(lambda x: 1.0, np.array([1.0]), method="Powell")
如果我要求 test.x
我得到:
array(3.58792896)
有问题"array":我无法从中获取价值。例如,test.x[0]
returns IndexError: too many indices for array
。好像是零维数组,或者是其他引用问题。
(格式正确的 ndarray
会显示为 array([3.58792896])
。)
我做错了什么?
那是一个 0 维数组,但它不应该是。虽然 0 维数组是 NumPy 中受支持的概念,但 minimize
调用不应该创建一个。 It looks like the devs are worried about breaking backward compatibility if they fix this,因此目前不太可能修复。
我建议使用 numpy.atleast_1d
来处理这种情况,与 return 一维数组的情况一致,并且如果它们最终改变了 return 值,则向前兼容:
test = minimize(...)
if not test.success:
handle_that()
result = np.atleast_1d(test.x)
对于您期望 0D 数组并想要检索存储值的情况,使用 0 索引的元组对其进行索引:
value = zero_d_array[()]