【发布时间】:2020-05-12 06:42:57
【问题描述】:
跟进my previous question 现在我对constrained bfgs method 中的边界数组的形状有疑问。
我的代码如下:
nr = 5
lag = 1
guess =numpy.array([[[ random.uniform(-1.0,1.0) for k in range(nr)] for l in range(lag)],
[[ random.uniform( 0.0,1.0) for k in range(nr)] for l in range(lag)],
[[ random.uniform(-1.0,1.0) for k in range(nr)] for l in range(lag)]])
bounds =numpy.array([[[ [-1.0,1.0] for k in range(nr)] for l in range(lag)],
[[ [ 0.0,1.0] for k in range(nr)] for l in range(lag)],
[[ [-1.0,1.0] for k in range(nr)] for l in range(lag)]])
result = optimize.fmin_l_bfgs_b( myfunc,guess.flatten(),bounds=bounds.reshape(15,2) )
如您所见,我从 (3,1,5) 形状的列表列表开始,这是我在 myfunc() 中使用的首选格式,因为它很容易用嵌套的 for 循环解析。然后这个列表被压缩成一个 (15,) 形状的 numpy 数组以满足 x0 参数的格式需求,但不要担心,因为 myfunc() 中的 X 值随后会转换回我的 (3,1,5 ) 通过X=X.reshape(origshape) 格式化,其中origshape 全局变量将保存原始格式。它可能看起来效率低下而且来回无用,但我找不到更容易的方法。
现在这适用于迄今为止的每个fmin_ 函数,除了fmin_l_bfgs_b 之类的边界,我无法弄清楚有界值需要采用什么形状。文档说:
"x 中每个元素的(min, max) 对,定义该参数的边界。"
所以我认为这意味着每个元素有 1 对,所以在我的情况下是 (15,2) 形状,但是当我使用上面的代码时,它给了我以下错误:
TypeError: 'float' object is not subscriptable
所以我想我弄错了形状。请帮我解决这个问题。
【问题讨论】:
标签: arrays python-3.x numpy scipy scipy-optimize