gpt4 book ai didi

python - Cython sum v/s 平均内存跳跃

转载 作者:IT老高 更新时间:2023-10-28 20:48:54 25 4
gpt4 key购买 nike

我一直在尝试使用 Cython,但遇到了以下特殊情况,其中数组上的求和函数所用时间是数组平均值所用时间的 3 倍。

这是我的三个功能

cpdef FLOAT_t cython_sum(cnp.ndarray[FLOAT_t, ndim=1] A):
cdef double [:] x = A
cdef double sum = 0
cdef unsigned int N = A.shape[0]
for i in xrange(N):
sum += x[i]
return sum

cpdef FLOAT_t cython_avg(cnp.ndarray[FLOAT_t, ndim=1] A):
cdef double [:] x = A
cdef double sum = 0
cdef unsigned int N = A.shape[0]
for i in xrange(N):
sum += x[i]
return sum/N


cpdef FLOAT_t cython_silly_avg(cnp.ndarray[FLOAT_t, ndim=1] A):
cdef unsigned int N = A.shape[0]
return cython_avg(A)*N

这是 ipython 中的运行时间

In [7]: A = np.random.random(1000000)


In [8]: %timeit np.sum(A)
1000 loops, best of 3: 906 us per loop

In [9]: %timeit np.mean(A)
1000 loops, best of 3: 919 us per loop

In [10]: %timeit cython_avg(A)
1000 loops, best of 3: 896 us per loop

In [11]: %timeit cython_sum(A)
100 loops, best of 3: 2.72 ms per loop

In [12]: %timeit cython_silly_avg(A)
1000 loops, best of 3: 862 us per loop

我无法解释简单 cython_sum 中的内存跳跃。是因为一些内存分配吗?因为这些是从 0 到 1 的随机数。总和约为 500K。

由于 line_profiler 不适用于 cython,我无法分析我的代码。

最佳答案

@nbren12 的结果似乎是明确的答案:这些 results cannot be reproduced .

证据(和逻辑)指出这两种方法具有相同的运行时间。

关于python - Cython sum v/s 平均内存跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24271141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com