

変数の制約付きで関数を最小化するため, scipy.optimize.minimizeで以下のようにL-BFGS-Bを指定しました

[code]

    import scipy.optimize as opt
    
    bounds = opt.Bounds(#np.ndarray, #np.ndarray)
    result = opt.minimize(loss_f, x0_ft, method='L-BFGS-B', jac=f_grad, 
                  bounds=bounds, tol=10e-6, options={'maxiter': 100, 'disp': True})
    
[/code]

このとき, `failed to initialize intent(inout) array -- expected elsize=8 but got
4`のエラーが発生し, 実行できません

`method`に他のものを指定したときは正しく実行でき, L-BFGS-Bのときだけこのエラーが発生します

解決法など知っている方がいましたら教えていただきたいです

python 3.6.8  
scipy:1.3.0  
以下出力

[code]

    RUNNING THE L-BFGS-B CODE
    
               * * *
    
    Machine precision = 2.220D-16
     N =            9     M =           10
    
    At X0         0 variables are exactly at the bounds
    # ここまで標準出力
    
    # ここからエラー出力
    Traceback (most recent call last):
      File "main.py", line 147, in <module>
        main()
      File "main.py", line 120, in main
        options={'maxiter': 100, 'disp': True})
      File "略/scipy/optimize/_minimize.py", line 600, in minimize
        callback=callback, **options)
      File "略/scipy/optimize/lbfgsb.py", line 328, in _minimize_lbfgsb
        isave, dsave, maxls)
    ValueError: failed to initialize intent(inout) array -- expected elsize=8 but got 4
    
    
[/code]


CC BY-SA 4.0
2019-07-01T15:39:54.580
56299
2020-04-04T05:01:30.220
2019-07-02T09:32:53.383
34886
34886
question
python scipy
scipy.minimizeでL-BFGS-Bのときだけエラーが出る


自己解決しました. 目標関数とその勾配を返す関数 `loss_f`, `f_grad`が`np.float32`を返していたのですが,
これを`np.float64`を返すようにしたところ実行できました.

そうするとエラーの`elsize`はバイト数を意味していたのかなと思います.

対症療法的な解決方法ですが, 参考までに.


CC BY-SA 4.0
2019-07-03T07:27:17.353
56344
2019-07-03T07:27:17.353
34886
56299
answer