python C 优化Cython中的字符串
发布时间:2023-12-17 01:32:29 所属栏目:Python 来源:DaWei
导读: 我试图向我们的团队展示Cython的优点,以提高
Python性能.我已经显示了几个基准,所有这些都可以通过以下方式获得加速:
>编译现有的Python代码.
>将cdef用于静态类型变量,特别是内部
Python性能.我已经显示了几个基准,所有这些都可以通过以下方式获得加速:
>编译现有的Python代码.
>将cdef用于静态类型变量,特别是内部
我试图向我们的团队展示Cython的优点,以提高 Python性能.我已经显示了几个基准,所有这些都可以通过以下方式获得加速: >编译现有的Python代码. 然而,我们的大部分代码都是字符串操作,而且我还没有想出通过键入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 C 一切都是纯ASCII.我们使用的是Python 2.7.2 任何建议是赞赏. 解决方法 我建议你在cpython.array.arrays上进行你的操作.最好的文档是C API和Cython源码,我太懒了链接了. 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字典
- Python3如何通过唯一键连接两个dicts列表
- 在python列表解析中解包元组(未使用* -operator)
- ImportError:没有模块名称’matplotlib’Python 3.3
- python – 填充OpenCV轮廓的外部
- 在远程服务器上使用ein(emacs ipython notebook)
- python – 将变量传递到jinja导入或从父HTML文件中包含
- 具有上下文变量参数的Django自定义模板标记
- python – 了解matplotlib xticks语法
- 在Python中是否有一个漂亮的State Machine框架?
推荐文章
站长推荐
- 如何执行python命令行自动完成,但不仅仅是在字符
- python – S3使用s3cmd重定向302对象
- python C 基本的openGL,顶点缓冲区和pyglet
- Select、Poll、Epoll、 异步IO 介绍
- python – Django – 显示ImageField
- python – 带smtp.gmail的Django电子邮件SMTPAut
- python – 在SQLAlchemy中动态设置__tablename__
- java如何实现python的urllib.quote(str,safe=/)
- 如何在跟踪Python函数时获取调用表达式?
- 一个使用SimpleHTTPServer和SocketServer的简单的