【问题标题】:Numba 0.35.0 : Use NumPy out parameterNumba 0.35.0:使用 NumPy 输出参数
【发布时间】:2017-12-01 01:45:07
【问题描述】:

我正在做一些测试以更好地了解 Numba 如何与 NumPy 一起工作,这里我想看看 Numba 是否可以处理 out 参数。

import numpy as np 
from numba import njit , jit
from time import time 

@njit
def mult(a,b, N = 1000000):
    c = np.zeros_like(a)
    for i in range(N):
        np.multiply(a, b, out=c)
    return c

d = np.asarray([1,2,3,4,5,6,7,8,9])
e = np.asarray([1,2,3,4,5,6,7,8,9])

t = time()
e = mult(d,e)

print "Time Elapsed :" + str(time() - t)

不使用 Numba,代码运行良好。它甚至比使用 @jit 装饰还要快:在我的配置下,~1.2s 对 ~1.6s。

使用@njit 会导致该错误:

 LoweringError: unsupported keyword arguments when calling Function(<ufunc 'multiply'>)

虽然,Reading the Numba 0.15.1 doc.,他们说支持 out 参数。我能做些什么呢?

【问题讨论】:

    标签: python numpy numba


    【解决方案1】:

    只是 nopython 模式下的 numba 不支持关键字参数。如果您将其作为位置参数传递,它会起作用:

    @njit
    def mult(a,b, N = 1000000):
        c = np.zeros_like(a)
        for i in range(N):
            np.multiply(a, b, c)
        return c
    

    但是,使用总是做同样事情的循环可能是 numba 的一个问题,因为有时 numba 编译器会注意到结果在循环之间没有变化,并且它完全优化了循环 - 本质上导致在有缺陷的时机。但是在这种情况下,我认为这不会发生,但是在使用像 numba 这样的激进编译器并针对“幼稚”的 Python 方法计时时需要小心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多