您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 优化Cython中的字符串

5b51 2022/1/14 8:22:26 python 字数 2353 阅读 536 来源 www.jb51.cc/python

我试图向我们的团队展示Cython的优点,以提高 Python性能.我已经显示了几个基准,所有这些都可以通过以下方式获得加速: >编译现有的Python代码. >将cdef用于静态类型变量,特别是内部循环. 然而,我们的大部分代码都是字符串操作,而且我还没有想出通过键入Python字符串来优化代码的很好的例子. 我试过的一个例子是: cdef str a cdef int i,j for j in

概述

>编译现有的Python代码.
>将cdef用于静态类型变量,特别是内部循环.

然而,我们的大部分代码都是字符串操作,而且我还没有想出通过键入Python字符串来优化代码的很好的例子.

我试过的一个例子是:

cdef str a
cdef int i,j
for j in range(1000000):
   a = str([chr(i) for i in range(127)])

但是键入’a’作为字符串实际上使代码运行速度更慢.我已经阅读了关于“Unicode和传递字符串”的文档,但是在我看到的情况下,它是如何应用的.我们不使用Unicode – 一切都是纯ASCII.我们使用的是Python 2.7.2

任何建议是赞赏.

from cpython cimport array

def cfuncA():
    cdef str a
    cdef int i,j
    for j in range(1000):
        a = ''.join([chr(i) for i in range(127)])

def cfuncB():
    cdef:
        str a
        array.array[char] arr,template = array.array('c')
        int i,j

    for j in range(1000):
        arr = array.clone(template,127,False)

        for i in range(127):
            arr[i] = i

        a = arr.tostring()

请注意,所需的操作与您对字符串的操作有很大的不同.

>>> python2 -m timeit -s "import pyximport; pyximport.install(); import cyytn" "cyytn.cfuncA()"
100 loops,best of 3: 14.3 msec per loop

>>> python2 -m timeit -s "import pyximport; pyximport.install(); import cyytn" "cyytn.cfuncB()"
1000 loops,best of 3: 512 usec per loop

在这种情况下,这是一个30倍的加速.

另外,FWIW,您可以用arr.data.as_chars [:len(arr)]替换arr.tostring(),并输入一个字节,从而取消另外几个μs.

总结

以上是编程之家为你收集整理的python – 优化Cython中的字符串全部内容,希望文章能够帮你解决python – 优化Cython中的字符串所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶