numba.jit 似乎对性能没有影响的情况

我正在运行简单的测试,看看 numba.jit 是如何提高 numpy 数组循环函数的速度的。但是,在这两个示例中:


def f():

    a=np.ones(1000)

    for i in range(100000):

        a+=np.random.normal(0,1,1000)

%time f()


from numba import jit


@jit

def g():

    a=np.ones(1000)

    for i in range(100000):

        a+=np.random.normal(0,1,1000)


%time g()

我得到:


CPU 时间:用户 3.75 秒,系统:0 ns,总计:3.75 秒挂墙时间:3.75 秒

CPU 时间:用户 3.86 秒,系统:4.11 毫秒,总计:3.86 秒挂墙时间:3.84 秒

所以 numba.jit 在这种情况下似乎没有任何影响。这是为什么?


斯蒂芬大帝
浏览 196回答 2
2回答

慕田峪7331174

目前尚不清楚为什么您认为应该进行改进。我通过添加一个带有 的内部循环看到了改进numba,这可能是因为 JIT 编译可以使用更基本的、较低级别的类型优化操作。# python 3.6.0, numpy 1.11.3, numba 0.30.1np.random.seed(0)def f(m, n):    a = np.ones(n)    for i in range(m):        a += np.random.normal(0,1,n)    return a@jitdef g(m, n):    a = np.ones(n)    for i in range(m):        x = np.random.normal(0,1,n)        for j in range(n):            a[j] += x[j]    return a%timeit f(10**5, 10**3)  # 6.53 s per loop%timeit g(10**5, 10**3)  # 4.68 s per loop
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python