Cython学习

Cython学习

本文按照工具书逻辑罗列了Cython语法,并总结了我工作中的编程经验。对于一些常见问题给出了一些”非专业“解决办法(不知道为啥能解决,但是能解决)。由于不是科班出身,班门弄斧还请见谅,大佬们发现啥错误欢迎在下方评论,不定期修改,不定期增加内容。下面进入主题:


Cython:疑问篇

问题一:为什么要用Cython

  1. Python编写数值计算程序用到了大量**for-loop,**并且这些loop无法用数组型语法替代(即不能通过Numpy、Cuda等库提升速度)。

  2. 为什么不考虑使用pypy和numba?

    在我做过的测试中,pypy的性能提升弱于精心编写的Cython程序,并且对开源库支持有限(如Numpy、Matplotlib)。Cython一次编译完可重复使用。(暂不清楚有没有预先编译好的功能)

  3. **为什么不考虑用C和C++编写好模块然后用python调用?**答案–>时间成本。如果没学过这两个语言且没有编程基础,解决问题的大部分时间都会花在语言上。C和C++各有优势,C倾向于过程,C++倾向于对象,而cython既能实现过程加速也能用类python语法完胜面向对象编程。(当然在一些细枝末节的事上,Cython肯定比不上C和C++)

问题二:使用Cython要储备好哪些知识

  1. 如果只会Python一门编程语言,不建议直接用Cython,不然很多问题没有解决思路(当然如果你能耐心看完这篇文章可以省很多事)。较好的顺序是先看C基础(至少看完循环、条件分支与函数),然后学习Cython,这样应用时的效率会高很多。

Cython:编译流程(Mac os)

  1. 在项目文件夹下新建一个后缀名为.pyx的文件即Cython文件,如果有写好的python代码可以把代码先复制过去。
  2. 在项目文件夹下新建一个名为setup.py的python文件,在里面敲好如下代码:
import numpy as np  
# 不用numpy不加这行
from distutils.core import setup  
# 必须部分
from distutils.extension import Extension  
# 必须部分
from Cython.Distutils import build_ext  
# 必须部分

ext_modules = [Extension("filename", ["filename.pyx"], include_dirs=[np.get_include()]),]
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值