2.8。与 Python 语义的偏差
原文: http://numba.pydata.org/numba-doc/latest/reference/pysemantics.html
2.8.1。异常和内存分配
由于当前编译器在处理异常时的限制,在引发异常的函数中分配的内存(几乎总是 NumPy 数组)将泄漏。这是一个已修复的已知问题,但与此同时,最好在函数之外进行内存分配,这也可能引发异常。
2.8.2。整数宽度
虽然 Python 具有任意大小的整数,但 Numba 编译函数中的整数通过类型推断(通常是机器整数的大小)获得固定大小。这意味着算术运算可以包围或产生未定义的结果或溢出。
可以通过显式类型规范覆盖类型推断,期望对整数宽度进行细粒度控制。
也可以看看
2.8.3。布尔反转
在 Python boolean 上调用按位补码运算符(~
运算符)返回一个整数,而 Numpy 布尔值上的相同运算符返回另一个布尔值:
>>> ~True
-2
>>> ~np.bool_(True)
False
Numba 遵循 Numpy 语义。
2.8.4。全局和闭包变量
在 nopython 模式中,Numba 的全局和闭包变量是 _ 冻结 _:Numba 编译的函数在编译函数时看到这些变量的值。此外,无法从功能更改其值。
Numba 可能会或可能不会复制已编译函数内引用的全局变量。通过不变性假设复制小的全局数组以进行潜在的编译器优化。但是,不会复制大型全局数组以节省内存。 “小”和“大”的定义可能会改变。
去做
该文件需要完成。