无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。教程链接:https://www.cbedai.net/qtlyx

python作为一门强大的脚本语言,优势自然不必说,目前中低频的量化投资基本都是使用python作为research和production作为语言。但是,当我们的模型较复杂,运算量较大的时候,python的短板就会出现,就是运算速度慢。

当然,解决这一问题有很多方法,比如笔者先前提到的pypy的jit技术,但是抛开稳定性不提,使用pypy有很多限制,而且不是那么工程化。所以,从本文开始,笔者向大家介绍Cython的一系列文章,方便将来量化或者别的应用场景中的一些重计算的部分单独取出来,然后用Cython改写,独立成模块来提高运算速度。

首先,大家都知道,C语言是编译性语言,而Python则是解释性语言,简而言之,就是Python运行是逐行运行,不需要实现编译,而C需要在运行前编译。那么,可想而知,如果运行前,需要事先编译,那么其实有一种“上帝视角”的感觉,自然可以做很多优化,让代码运行的更快。

而Cython的出现就是这个目的,让Python也可以被编译,然后执行。大家要区别Cpython和Cython,Cpython大家可以认为是python的一种,其实大家平时使用的基本都是cpython。而Cython大家可以直接理解为一种语言,Cython是一种部分包含和改变C语言,以及完全包含pyhton语言的一个语言集合。学习一段时间后大家肯定会更加理解这句话。

我们先来过一下cython编写的流程吧。

在写cython之前,我们需要一个c编译器,笔者目前使用的是win10,不知道怎么的,就是不能像以前win7一样好好玩,所以直接在linux下面编译了。如果大家是windows平台,需要先安装一个专门为python准备的编译器,笔者的版本是2.7的,链接如下:

https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266

然后就是测试一下流程了。首先我们要知道,cython的文件后缀是.cyx,而且既然cython是python语言的一个超集,那么,cyx里面运行纯python文件也是没有问题的了。

我们新建一个hello.pyx文件,在里面输入

print "Hello World"

没有任何特殊,然后我们新建一个setup.py脚本,这个python文件的目的就是使用cython编译器去编译pyx折一个cython文件。

setup文件的代码很简单:

from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modules=cythonize("hello.pyx")
)

然后我们运行一下setup文件,python setup.py build_ext --inplace. build_est大概就是编译extension文件的意思,inplace则是放到源代码pyx旁边,也就是同一目录下的意思。

然后,我们就可以看到多了两个文件,一个是hello.c一个是hello.so(如果你是windows,那么应该是.pyd)

这里,c文件就是cython将我们的pyx文件解析成一个c文件件,不依赖与平台,而后面的so或者pyd文件,则是将c文件进行编译后的一个文件,依赖于平台。

这个时候,so文件或者pyd文件就可以像普通的python文件一样,被import。

当然,每次如果都要这样写个setup文件编译一下,其实挺麻烦的,还好cython给我们提供了一个很方便的解决方案。

写完hello.pyx的cython代码之后,不需要编译,当我们需要使用的时候,在文件前面加上

import pyximport
pyximport.install()
import hello

然后就可以了。其实,不是不用编译了,而是cython默默帮我们编译好了,放在其他地方罢了,对于我们使用者而言,整体就简洁好的诺。

这就是一个cython使用的初步,性能如何,以及cython语法,将在后面的部分中讲述。

参考数据:Cython A Guide for Python Programming

Cython入门到放弃(一)相关推荐

  1. AI从入门到放弃2:CNN的导火索,用MLP做图像分类识别?

    来源 | 腾讯知乎专栏 作者 | AIoys(腾讯员工,后台工程师) 项目文档和代码在此:github项目地址: https://github.com/zsysuper/AI_Notes ▌一.前言 ...

  2. AOP埋点从入门到放弃(二)

    其实人最大悲哀莫过于知道自己想要什么,却不知道怎么坚持!最近迷恋上了死侍 其实和我平时的状态差不多,以一个混子的心态去做任何事情,往往成功的概率会更大!!! 一张图片镇楼!!! 上文说到了Aspect ...

  3. 入门到放弃node系列之网络模块(二)

    为什么80%的码农都做不了架构师?>>>    前言 本文首发[一名打字员] 上一节我们刚刚介绍完node的HTTP和HTTPS模块,相信我们也对nodejs有了更深层次的理解,接下 ...

  4. webpack - vue Component 从入门到放弃(三)

    离上一篇已经一个星期了,人的拖延症是没法救的,今晚趁着蒙蒙春雨,来抒发抒发情感. 上一篇简单介绍了webpack的配置,这里稍微再做一一下延伸 插件 插件可以完成更多 loader 不能完成的功能.插 ...

  5. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. python ** 运算符_Python从入门到放弃运算符(2)

    摘要:上一篇Python从入门到放弃-运算符(1),讲了Python的运算符中的算术运算符.赋值运算符.比较(关系)运算符,这篇继续讲Python的运算符. 逻辑运算符 逻辑运算符是对真和假两种布尔值 ...

  7. python从入门到放弃系列恶搞短片-太惨!学Python方法用错,直接从入门到放弃!...

    原标题:太惨!学Python方法用错,直接从入门到放弃! 从你开始学习编程的那一刻起,就注定了以后所要走的路-从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在 ...

  8. 为什么叫python编程-月薪上万的Python编程,为什么你还没入门就放弃了?

    "大家都是怎么学Python 的?我学了一个月,感觉自己怎么学都学不进去啊,还是一脸懵--学习前我有做过规划,现在连入门都不算,我应该怎么办啊!!!求大神给一个学习思路!求大神讲解入门要重点 ...

  9. python从入门到放弃图片大全-Python 从入门到放弃(一)

    Python 从入门到放弃(一) 一个没有逻辑顺序的python笔记,包括日常使用python时的总结与阅读<Python基础教程>([挪] Magnus Lie Hetland 著) 的 ...

最新文章

  1. ae编程语言as_AE开发 入门教程
  2. NYOJ 456 邮票分你一半
  3. 计算机网络( 二十二)-数据链路层(补充)
  4. ElasticSearch权威指南学习(结构化查询)
  5. CheckBoxList 赋值问题
  6. 继续跟上--“永远不要对一个外行聊你的专业”
  7. 在线制作车牌效果图_价格低的防火板材行业专家在线为您服务
  8. 2022 MathorCup 数学建模B题思路解析
  9. java上传下载原理_Java上传下载文件原理
  10. css中pt单位,css中字体单位px,pt,em,百分比之间的区别和用法
  11. 笔记十五:研发管理者如何激励他人
  12. 微信硬件平台wifi设备通信第一篇
  13. 简述关系数据库的数据完整性规则_关系数据库的完整性简述 关系数据库完整性规则...
  14. ASCII码直接16进制转换(16转换为0x16)
  15. 「六一端午」双节|营销人必看的新玩法
  16. 将H264码流打包成RTP包
  17. 鼠标连点器同时点多个位置_一台电脑登录多个微信,简单,按住ENTER,鼠标快速点,扫描OK...
  18. 2022优秀作文范文
  19. C#开发——C# 程序构建
  20. linux打包工具deb,deb打包方法

热门文章

  1. linux中如何安装windows
  2. Linux - samba实现Linux与windows文件共享——共享文件夹目标文件访问权限被拒绝解决方案(超详细,看不懂你怪我)
  3. Web安全工具大集合
  4. 【众说区块链】公链是否一定要发币,Token到底应该怎么理解?
  5. eclipse的正确使用方式
  6. Chromedriver 安装
  7. 3.5 二维随机变量函数的分布
  8. Unknown error 1146的解决办法:
  9. Android ObjectAnimator类:手把手带你自定义属性动画
  10. 学习ifconfig实战技巧,成为网络管理高手