Python:在 Numba 中创建和复制 numpy 数组?

Python: creating and copying numpy arrays in Numba?

我经常使用 Numba 来加速许多无法矢量化的循环,否则会非常慢。 我的问题是:

  1. Numba 函数可以创建 numpy 数组吗?我还没有找到方法:np.zeros 之类的函数在 Numba 中不起作用。 我现在做的是创建空数组(初始化为零或 NaNs) 在 Numba 之外并将它们传递给我的 Numba 函数,该函数 然后根据我的循环计算填充它们。

    1. 坎巴 做一个 numpy 数组的深拷贝?我经常需要处理许多数组 大小相同。 Numba 可以 运行 array2 = array1 ,但是 array2 成为对 array1 的引用(改变一个改变另一个)。
    2. 当我有很多输入和输出的非 Numba 函数时,我 喜欢创建没有输入和输出方法的 类。这个 我可以 运行 这样的方式:

    我的输入。input_1= foo1

    我的输入。input_2 = foo2

    我的输出=我的函数(我的输入)

当我有 20 个输入和 20 个输出时,这很方便。 Numba 可以支持这样的东西吗?

Numba 正在积极开发中,因此您的问题的答案取决于版本。在 Numba >0.19 中,您可以在 nopython 模式下创建 numpy 数组。所有支持的 numpy 构造都列在:

http://numba.pydata.org/numba-doc/0.20.0/reference/numpysupported.html

arr.copy() 也支持 nopython 模式,至少在 0.20(我检查过的地方)。

在传递包含数组作为属性的对象方面,您可以在对象模式nopython=False 中执行此操作,但在nopython 模式下不起作用。然后你必须检查你得到什么样的加速。在这种情况下,Numba 可能能够进行一些后续的循环提升。

我的建议是,如果可能的话,及时了解 Numba 版本。他们添加了很多功能,根据我的经验,他们还修复了很多错误。