升级Numpy至1.14.2后Scipy.optimize.minimize抛出TypeError异常
解决Numpy 1.14.2 + Scipy minimize(SLSQP) 中的布尔减法TypeError问题
这个问题我之前在容器化服务里也碰到过,核心原因是Numpy 1.14.x版本开始彻底禁用了布尔数组的-减法操作,而旧版本的Scipy(比如0.19.x及更早)的SLSQP优化器内部代码还在使用这个被弃用的语法,直接触发了TypeError。下面给你几个可行的解决办法:
升级Scipy到兼容版本
Scipy 1.0.0及以上版本已经修复了和Numpy 1.14+的兼容性问题,针对你的Docker环境,只需要在依赖安装命令里指定Scipy的最低版本即可:RUN pip install scipy>=1.0.0 numpy==1.14.2新版本的Scipy会用合规的布尔操作替代旧的减法逻辑,自然就不会报错了。
回退Numpy到1.13.3版本
如果暂时不想升级Scipy(比如项目依赖旧版Scipy的某些特性),最简单的办法就是把Numpy回退到之前的1.13.3版本,这个版本还允许布尔数组的减法操作:RUN pip install numpy==1.13.3检查自定义代码中的布尔操作
虽然你提到错误来自Scipy内部,但还是建议快速排查下自己的minimization_function或者constraints约束函数里,有没有对布尔数组使用-的情况(比如bool_arr1 - bool_arr2)。如果有的话,把它替换成np.logical_xor(bool_arr1, bool_arr2)或者位异或操作符bool_arr1 ^ bool_arr2,这也是Numpy官方推荐的替代方式。
内容的提问来源于stack exchange,提问作者Gavello
相关产品推荐
相关产品推荐

