Skip to content

2.8。与 Python 语义的偏差

原文: http://numba.pydata.org/numba-doc/latest/reference/pysemantics.html

2.8.1。异常和内存分配

由于当前编译器在处理异常时的限制,在引发异常的函数中分配的内存(几乎总是 NumPy 数组)将泄漏。这是一个已修复的已知问题,但与此同时,最好在函数之外进行内存分配,这也可能引发异常。

2.8.2。整数宽度

虽然 Python 具有任意大小的整数,但 Numba 编译函数中的整数通过类型推断(通常是机器整数的大小)获得固定大小。这意味着算术运算可以包围或产生未定义的结果或溢出。

可以通过显式类型规范覆盖类型推断,期望对整数宽度进行细粒度控制。

也可以看看

增强建议 1:整数输入的变化

2.8.3。布尔反转

在 Python boolean 上调用按位补码运算符(~运算符)返回一个整数,而 Numpy 布尔值上的相同运算符返回另一个布尔值:

>>> ~True
-2
>>> ~np.bool_(True)
False

Numba 遵循 Numpy 语义。

2.8.4。全局和闭包变量

nopython 模式中,Numba 的全局和闭包变量是 _ 冻结 _:Numba 编译的函数在编译函数时看到这些变量的值。此外,无法从功能更改其值。

Numba 可能会或可能不会复制已编译函数内引用的全局变量。通过不变性假设复制小的全局数组以进行潜在的编译器优化。但是,不会复制大型全局数组以节省内存。 “小”和“大”的定义可能会改变。

去做

该文件需要完成。


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组