为什么numba在这个简单的求和上要快得多?

2024-10-03 23:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个公共笔记本,其中python、numpy、numba、cython和fortran在简单的求和上进行比较:

https://gist.github.com/denfromufa/7727874c4fe1e7e174ed953930e93bbc

为什么麻木跑得这么快?在


Tags: httpsnumpygithubcom笔记本cythongistfortran
1条回答
网友
1楼 · 发布于 2024-10-03 23:18:22

正如@DavidW所指出的,你并没有真正地对相同的算法进行比较。下面我为每个cython和numba编写了两个独立的函数,它们执行相同的操作。第一个操作在一个数组上,第二个只是给定一个整数:

赛顿:

cpdef long cy_sum(long[:] A):
    cdef long i, n = A.shape[0], s = 0
    for i in range(n):
        s += A[i]
    return s

cpdef long cy_sum2(long i):
    cdef long s, x
    s = 0
    for x in range(i):
        s += x
    return s

麻木:

^{pr2}$

测试以确保它们给出相同的结果:

N = int(1e6)
d = np.arange(N, dtype=np.int64)

print np.allclose(nb_sum(d), cy_sum(d))   # True
print np.allclose(nb_sum2(N), cy_sum2(N))  # True

硬件上的时间安排:

%timeit cy_sum(d)
%timeit nb_sum(d)

1000 loops, best of 3: 416 µs per loop
1000 loops, best of 3: 237 µs per loop

%timeit cy_sum2(N)
%timeit nb_sum2(N)

10000000 loops, best of 3: 63.5 ns per loop
10000000 loops, best of 3: 187 ns per loop

我不会从这样的微基准测试中得出太多结论,但至少现在正在比较等效的实现。在

相关问题 更多 >