gpt4 book ai didi

python - 循环列表比循环 ndarray 快 20 倍

转载 作者:行者123 更新时间:2023-12-01 05:11:34 26 4
gpt4 key购买 nike

我不明白为什么在下面的循环中,f?cf? 慢 20 倍。

我了解类型定义允许 Cython 利用 C 速度。

我在这里缺少什么?

谢谢

%%cython
import numpy as np
cimport numpy as np


cpdef f1(l):
for k in l:
k

cpdef f1c(np.ndarray npl):
cdef int i = 0
for i in range(npl.shape[0]):
npl[i]

cpdef f2(n):
for k in n:
k

cpdef f2c(np.ndarray npn):
cdef int i = 0
for i in range(npn.shape[0]):
npn[i]

以及时间安排:

l = ["lol"]*100000
npl = np.array(l, dtype=np.str)

n = [1]*100000
npn = np.array(n, dtype=np.int)



%timeit f1(l)

%timeit f1c(npl)

%timeit f2(n)

%timeit f2c(npn)

1000 loops, best of 3: 484 µs per loop
100 loops, best of 3: 13.1 ms per loop
1000 loops, best of 3: 483 µs per loop
100 loops, best of 3: 12.4 ms per loop

最佳答案

当您指定数据类型和数组的维数时,numpy 上的循环速度至少快一个数量级:

def f2c(np.ndarray[np.int_t, ndim=1] npn):
cdef int i = 0
for i in range(npn.shape[0]):
npn[i]

同样,对于字符串大小写,我的循环速度提高了两倍:

def f1c(np.ndarray[object, ndim=1] npl):
cdef int i = 0
for i in range(npl.shape[0]):
npl[i]

在这种情况下您必须使用:

npl = np.array(l, dtype=object)

关于python - 循环列表比循环 ndarray 快 20 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24128893/

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