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

Pyt*_*ous 5 python numpy numba

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

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

    1. Numba 可以深度复制 numpy 数组吗?我经常需要处理许多相同大小的数组。Numba 可以运行array2 = array1,但 array2 成为对 array1 的引用(更改一个会更改另一个)。
    2. 当我拥有具有多个输入和多个输出的非 Numba 函数时,我喜欢创建没有输入和输出方法的类。这样我就可以运行类似的东西:

    myinput.input_1= foo1

    myinput.input_2 = foo2

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

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

Jos*_*del 4

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

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

arr.copy()至少在 0.20 模式中也受支持nopython(我检查过)。

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

我的建议是,如果可能的话,保持最新的 Numba 版本。他们添加了很多功能,根据我的经验,也修复了很多错误。