python - 为什么使用 Numba 编译代码时不会执行此 while 循环?
问题描述
我有一小段代码,如下所示:
@njit
def looptest():
value0 = np.NaN
while math.isnan(value0):
print('Nan 2: ', math.isnan(value0))
break
令人惊讶的是,该打印从未执行。
Numba 表示支持 math.isnan:https ://numba.pydata.org/numba-doc/latest/developer/autogen_math_listing.html#math.isnan
所以我尝试了cmath
,这也被认为是受支持的。结果相同:循环永远不会执行,但只有在使用 Numba 编译时才会执行。如果我禁用 JIT 编译,它会打印得很好。
然后我添加了一些调试信息:
@njit
def looptest():
value0 = np.NaN
print('Nan 1: ', cmath.isnan(value0))
print(value0)
while cmath.isnan(value0):
print('Nan 2: ', cmath.isnan(value0))
break
我看到,即使使用 Numba 编译,它isnan
似乎也能正确解析为 True:
Nan 1: True
nan
然而,再次令我惊讶的是,当使用 Numba 编译时,while 循环内的第二个打印不会执行。
我尝试使用NUMBA_OPT=1
和NUMBA_OPT=0
- 相同的结果来减少优化。
到底是怎么回事?如何编写此代码,以便无论是否使用 Numba 编译,while 循环都将执行相同的操作?
解决方案
推荐阅读
- python - 烧瓶表单没有验证
- python - 如何使用 Selenium TimeoutException 修复未绑定的本地错误
- javascript - 在 ReactJS 中使用按钮过滤数据
- linux - i3 将编号分配给窗口并移动到编号
- python - 在 python3.6 上安装 pycrypto
- ckeditor5 - CKEditor 5 Angular 与提及插件
- excel - VBA 从工作表选择中取消选择行和列
- outlook - AdaptiveCard 无法在 Office 365 Proplus Outlook 中呈现
- mysql - 根据另外两列的范围在两列中扩展日期
- firebase - Firestore 云功能在不部署功能的情况下不会触发