【问题标题】:what is the recommended data type to pass into and out of numba functions?传入和传出 numba 函数的推荐数据类型是什么?
【发布时间】:2019-01-08 13:12:27
【问题描述】:

我想知道传入和传出 numba 函数的推荐数据类型是什么。在示例 (https://numba.pydata.org/numba-doc/dev/user/examples.html) 中,我看到如下内容:

def create_fractal(min_x, max_x, min_y, max_y, image, iters):

但我通常使用命名的参数字典或类似的东西。

params={'min_x':0,'max_x':100,'arr':rand(5),....}

我应该使用 jitclass 吗?还有什么?有没有比 1 更深的东西?我想我正在寻找相当于 c-struct 的东西,或者 numba 会看到的 c-struct。

谢谢!

【问题讨论】:

    标签: python numba


    【解决方案1】:

    在输入端,jitted Numba 函数确实接受未打包的关键字参数,并且根据我有限的经验,使用它们似乎并没有太大的性能损失。例如,如果我写

    @njit
    def f(x, y, z):
        return x + y - z
    
    x, y, z = np.ones(100), np.zeros(100), np.full(100, 4.)
    vals = {'x': np.ones(100), 'y': np.zeros(100), 'z': np.random.rand(100)}
    

    然后,在第一次运行编译后,我得到了时间:

    In [8]: %timeit f(**vals)
    1.41 µs ± 17.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    In [9]: %timeit f(x, y, z)
    1.44 µs ± 25.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    我的猜测是,dicts 是您最好/最轻量级的选择,除非您可能会进行大量微小的函数调用并且函数开销成为主要问题。

    如果您想将内容输出为 dicts,而不是自己进行转换,这有点棘手,因为我认为 nopython 模式尚不支持它。也许到那时,开销会变得足够大,以至于 jitclass 才有意义。

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 2018-04-21
      • 2010-10-30
      • 2014-02-14
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多