Продолжение моего предыдущего вопроса Теперь у меня проблема с формой массива bounds в методе ограниченного bfgs .
Мой код следующий:
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()
, потому что с ним легко разбираться вложенный в циклы. Затем этот список сокращается в массив numpy (15,) в форме для удовлетворения потребностей формата x0
, но не беспокойтесь, потому что значение X
внутри myfunc()
затем преобразуется обратно в мой (3,1,5) формат через X=X.reshape(origshape)
, где глобальная переменная origshape
сохранит исходный формат. Это может показаться неэффективным и бесполезным, но я не мог найти способ сделать это проще.
Теперь это работает с каждой fmin_
функцией, кроме как с границами вроде fmin_l_bfgs_b
, я не мог понять, в какой форме должны быть ограниченные значения. Документация гласит:
"(min, max) пары для каждого элемента в x, определяя границы для этого параметра."
Поэтому я подумал, что это означает 1 пару для каждого элемента, поэтому a (15, 2) форма в моей ситуации, но когда я использую код выше, это дает мне следующую ошибку:
TypeError: 'float' object is not subscriptable
Так что, я думаю, я неправильно понял форму. Пожалуйста, помогите мне исправить это.