使用cython优化python代码

时间:2018-06-10 12:15:58

标签: string cython

我想优化Python中的代码,以提高字符串处理的速度,并想知道是否有人可以提供帮助。

我在Cython做过一些测试,但我对结果并不是特别满意。我想知道字符串处理是否可以优化,或者我在Cython中没有创建正确的代码。在第一种情况下,对字符串列表进行交互并对变量进行简单分配的速度平均快5倍。在另一种情况下,我包括搜索子字符串,根本没有速度增加。

[TL; DR]

我有一个我需要处理的大型语料库。目前,在纯python中,我迭代搜索子字符串的字符串列表并过滤掉那些不包含给定子字符串的元素(主字符串)。我创建了几个for循环,希望在将代码转换为Cython后显着提高速度。

首先,我测试了在将字符串分配给变量时,对两个字符串列表进行简单迭代的速度有多快:

结果:

[Cython][1]: 0.45067 sec
[Python][2]: 2.09907 sec
[Cython][1] approximately 4.5 times faster than [Python][2]

Cython中的代码:

def start(itsstr, tokens):
    cdef size_t s
    cdef size_t t
    cdef size_t ns = len(itsstr)
    cdef size_t nt = len(tokens)
    cdef unicode x
    for s in xrange(ns):
        for t in xrange(nt):
            x = itsstr[s]

Python

def start(itsstr, tokens):
    for s in itsstr:
        for t in tokens:
            x = s

Python中的当前主代码搜索子字符串。我测试了在Cython中搜索子字符串的速度增加。结果如下:

结果:

[Cython][1]: 7.13278 sec
[Python][2]: 8.7094 sec
[Cython][1] 1.2 times faster than [Python][2]

Cython中的代码:

def start(itsstr, tokens):
    cdef size_t s
    cdef size_t t
    cdef size_t ns = len(itsstr)
    cdef size_t nt = len(tokens)
    cdef unicode x
    for s in xrange(ns):
        for t in xrange(nt):
            if tokens[t] in itsstr[s]:
                x = itsstr[s]

Python

中的代码
def start(itsstr, tokens):
    for s in itsstr:
        for t in tokens:
            if t in s:
                x = s

正如您所看到的,没有任何速度增加。

我一直在想我现在能做些什么?我在Cython没有经验。不过,我在C / C ++方面有很好的经验。

由于

0 个答案:

没有答案