提高6.75倍!利用Cython爲Python代碼加速

全文共2012字,預計學習時長4分鐘html

圖片來源:Unsplash算法

若是你曾經用Python編寫過代碼,可能會發現等待某些代碼塊執行的時間比預期要長。儘管能夠經過一些方法提升其代碼效率,但它的反應速度仍然比C語言慢。這主要歸結於Pyhton是一種動態程序語言,在運行時執行不少任務,而C語言在編譯期間便已經執行。編程

若是你很享受用Python編寫代碼,但又但願能夠提升效率,那麼能夠考慮一下使用Cython。Cython是一種獨立編程語言,能夠很容易地併入相似於Jupyter筆記本之類的工做流之中。在執行過程當中,Cython會將Python代碼轉換爲C語言,從而大大提升其運行速度。bash

安裝Cython微信

使用Cython須要安裝C語言編譯器,所以,安裝過程會根據你當前的操做系統而有所不一樣。對於Linux操做系統,一般須要安裝GNU C語言編譯器(gncc)。對於Mac操做系統,則須要經過下載Xcode來安裝gncc。對於Windows操做系統,安裝程序會稍微有點複雜。app

安裝傳送門:編程語言

Mac:https://developer.apple.com/函數

Windows:file://localhost/C/%5CUsers%5C93954%5CDocuments%5CWeChat%20Files%5CWXYHYSFY_1816%5CFileStorage%5CFile%5C2019-07%5CCython%20GitHub學習

安裝C語言編譯器以後,下面須要的就是在終端運行。優化

如何使用Cython

經過Jupyter筆記本演示Cython的功能是最簡單的方法。要在筆記本中使用Python,須要運用IPython的魔術命令。該命令以百分號開始,提供附加功能用以加強工做流。一般,魔術命令分爲兩種類型:

1. Line Magic以一個%開頭,且僅能做用於一行代碼。

2. Cell Magic以兩個%開頭,能夠做用於多行代碼。

具體流程以下:

首先,爲了啓用Cython,須要執行命令

%load_extCython

每當想要在單元格中運行Cython時,須要先在單元格中輸入下面的魔術命令

%%cython

完成上述操做以後,即可以開始編寫Cython代碼了。

圖片來源:pixabay

Cython能有多快?

Cython能比常規Python代碼快多少實際上取決於代碼自己。例如,若是運行成本較高的多變量循環,Cython明顯優於常規的Python代碼。遞歸函數一樣使得Cython快於Python。

用斐波那契數列來演示一下。簡單來講,這一算法經過將前兩個數相加從而找到下一個數。下面是在Python中示範:

def fibonacci(n):    
if n < 0:        
print("1st fibonacci number = 0")    
elif n == 1:        
return 0    
elif n == 2:        
return 1    
else:        
return fibonacci(n-1) + fibonacci(n-2)複製代碼

讓咱們來啓動Python:

能夠看到,找到序列中第39個數用了13.3秒。掛鐘時間在這裏指的是從函數調用開始到結束所需的總時間。

在Cython中定義相同的函數:

那麼發生了什麼呢?能夠看到,在頂端執行cell magic命令,從而使得Cython能夠應用於這個單元格。我將簡要介紹「-a」的做用,接着,使用與以前基本同樣的代碼。惟一的不一樣之處在於此處可使用靜態類型聲明,並將n定義爲整數。

能夠看到,經過在魔術命令後添加「-a」,可以接收到一些標註,這些標註反映了代碼中有多少Python交互。這一代碼的目的在於去掉全部黃線並加上白色背景,於是此處不存在Python交互,全部代碼都在C語言中執行。你還能夠單擊每行旁邊的「+」查看Python代碼的C語言翻譯。

這一代碼能有多快呢?咱們一塊兒看看:

在本例中,Cython的速度大約是Python的6.75倍,這清楚地展現了Cython可以大大節約時間。這一點也是Cython相比於Python最大的改進之處。

附加選項

若是你對C語言已經有所瞭解,Cython還容許訪問C代碼,而Cython的建立者尚未爲這些代碼添加現成的聲明。那麼,使用如下代碼能夠爲C函數生成Python包裝器並將其添加到模塊dict中。

%%cython
cdef extern from "math.h":    
cpdef double sin(double x)複製代碼

Cython證實了並行性等許多額外的功能。

傳送門:http://docs.cython.org/en/latest/index.html

總之,若是你遇到在執行Python代碼時等待時間過長的問題,Cython能夠提供一種集成而高效的方法來加速代碼執行速度。更重要的是,若是你熟悉C語言,就可使用Cython許多進一步優化代碼的功能。

留言 點贊 關注

咱們一塊兒分享AI學習與發展的乾貨

歡迎關注全平臺AI垂類自媒體 「讀芯術」

(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)

相關文章
相關標籤/搜索