久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Cython入門(mén)到放棄(一)

 lichwoo 2020-03-14


        python作為一門(mén)強(qiáng)大的腳本語(yǔ)言,,優(yōu)勢(shì)自然不必說(shuō),目前中低頻的量化投資基本都是使用python作為research和production作為語(yǔ)言,。但是,,當(dāng)我們的模型較復(fù)雜,運(yùn)算量較大的時(shí)候,,python的短板就會(huì)出現(xiàn),,就是運(yùn)算速度慢。

        當(dāng)然,,解決這一問(wèn)題有很多方法,,比如筆者先前提到的pypy的jit技術(shù),但是拋開(kāi)穩(wěn)定性不提,,使用pypy有很多限制,,而且不是那么工程化。所以,,從本文開(kāi)始,,筆者向大家介紹Cython的一系列文章,方便將來(lái)量化或者別的應(yīng)用場(chǎng)景中的一些重計(jì)算的部分單獨(dú)取出來(lái),,然后用Cython改寫(xiě),,獨(dú)立成模塊來(lái)提高運(yùn)算速度。

        首先,,大家都知道,,C語(yǔ)言是編譯性語(yǔ)言,而Python則是解釋性語(yǔ)言,,簡(jiǎn)而言之,,就是Python運(yùn)行是逐行運(yùn)行,不需要實(shí)現(xiàn)編譯,,而C需要在運(yùn)行前編譯,。那么,可想而知,,如果運(yùn)行前,,需要事先編譯,那么其實(shí)有一種“上帝視角”的感覺(jué),,自然可以做很多優(yōu)化,,讓代碼運(yùn)行的更快。

        而Cython的出現(xiàn)就是這個(gè)目的,,讓Python也可以被編譯,,然后執(zhí)行。大家要區(qū)別Cpython和Cython,,Cpython大家可以認(rèn)為是python的一種,,其實(shí)大家平時(shí)使用的基本都是cpython,。而Cython大家可以直接理解為一種語(yǔ)言,Cython是一種部分包含和改變C語(yǔ)言,,以及完全包含pyhton語(yǔ)言的一個(gè)語(yǔ)言集合,。學(xué)習(xí)一段時(shí)間后大家肯定會(huì)更加理解這句話。

        我們先來(lái)過(guò)一下cython編寫(xiě)的流程吧,。

        在寫(xiě)cython之前,,我們需要一個(gè)c編譯器,筆者目前使用的是win10,,不知道怎么的,,就是不能像以前win7一樣好好玩,所以直接在linux下面編譯了,。如果大家是windows平臺(tái),,需要先安裝一個(gè)專(zhuān)門(mén)為python準(zhǔn)備的編譯器,筆者的版本是2.7的,,鏈接如下:

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

        然后就是測(cè)試一下流程了。首先我們要知道,,cython的文件后綴是.cyx,,而且既然cython是python語(yǔ)言的一個(gè)超集,那么,,cyx里面運(yùn)行純python文件也是沒(méi)有問(wèn)題的了,。

        我們新建一個(gè)hello.pyx文件,在里面輸入

print "Hello World"

        沒(méi)有任何特殊,,然后我們新建一個(gè)setup.py腳本,,這個(gè)python文件的目的就是使用cython編譯器去編譯pyx折一個(gè)cython文件。

        setup文件的代碼很簡(jiǎn)單:

  1. from distutils.core import setup
  2. from Cython.Build import cythonize
  3. setup(
  4. ext_modules=cythonize("hello.pyx")
  5. )

        然后我們運(yùn)行一下setup文件,,python setup.py build_ext --inplace. build_est大概就是編譯extension文件的意思,,inplace則是放到源代碼pyx旁邊,也就是同一目錄下的意思,。

        然后,,我們就可以看到多了兩個(gè)文件,一個(gè)是hello.c一個(gè)是hello.so(如果你是windows,,那么應(yīng)該是.pyd)

        這里,,c文件就是cython將我們的pyx文件解析成一個(gè)c文件件,不依賴與平臺(tái),,而后面的so或者pyd文件,,則是將c文件進(jìn)行編譯后的一個(gè)文件,依賴于平臺(tái),。

        這個(gè)時(shí)候,,so文件或者pyd文件就可以像普通的python文件一樣,,被import。

        當(dāng)然,,每次如果都要這樣寫(xiě)個(gè)setup文件編譯一下,,其實(shí)挺麻煩的,還好cython給我們提供了一個(gè)很方便的解決方案,。

寫(xiě)完hello.pyx的cython代碼之后,,不需要編譯,當(dāng)我們需要使用的時(shí)候,,在文件前面加上

  1. import pyximport
  2. pyximport.install()
  3. import hello

        然后就可以了,。其實(shí),不是不用編譯了,,而是cython默默幫我們編譯好了,,放在其他地方罷了,對(duì)于我們使用者而言,,整體就簡(jiǎn)潔好的諾,。

        這就是一個(gè)cython使用的初步,性能如何,,以及cython語(yǔ)法,,將在后面的部分中講述。

參考數(shù)據(jù):Cython A Guide for Python Programming

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多