如何用Cython加速Python代碼

今天就跟大家聊聊有關(guān)如何用Cython加速Python代碼,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):成都服務(wù)器托管,成都服務(wù)器租用,成都服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

如果你曾經(jīng)用Python編寫(xiě)過(guò)代碼,那么等待某些代碼塊執(zhí)行的時(shí)間可能比您希望的要長(zhǎng)。雖然有一些方法可以提高代碼的效率,但它很可能仍然比C代碼慢。這主要?dú)w結(jié)為一個(gè)事實(shí):Python是一種動(dòng)態(tài)編程語(yǔ)言,它將許多東西移動(dòng)到C在編譯期間負(fù)責(zé)的運(yùn)行時(shí)。

不過(guò),如果您像我一樣喜歡用Python編寫(xiě)代碼,并且仍然希望加快代碼的速度,那么您可以考慮使用Cython。雖然Cython本身是一種獨(dú)立的編程語(yǔ)言,但是很容易將其融入到您的工作流程中,例如Jupyter Notebook。在執(zhí)行時(shí),Cython將您的Python代碼轉(zhuǎn)換為C,通常會(huì)顯著地加快速度

安裝Cython

為了能夠使用Cython,您需要一個(gè)C編譯器。因此,安裝過(guò)程會(huì)根據(jù)您當(dāng)前的操作系統(tǒng)而有所不同。對(duì)于Linux,通常存在GNUC編譯器(gncc)。對(duì)于Mac OS,您可以下載Xcode來(lái)獲得gncc。如果您應(yīng)該使用Windows,安裝過(guò)程會(huì)稍微復(fù)雜一些。更多信息請(qǐng)?jiān)L問(wèn)Cython’s GitHub。

一旦你有了C編譯器,你需要在你的終端運(yùn)行的是:

1pip install Cython

如何使用Cython

演示Cython功能的最簡(jiǎn)單方法是通過(guò)Jupyter Notebooks。要在我們的筆記本中使用Cython,我們將使用IPython magic命令。Magic命令以百分號(hào)開(kāi)始,并提供一些額外的功能,這些功能可以增強(qiáng)工作流。通常,有兩種類型的Magic命令:

  1. 行magic由單個(gè)“%”表示,并且只在一行輸入進(jìn)行操作

  2. 單元格magic由兩個(gè)“%”表示,并在多行輸入上操作。

讓我們開(kāi)始:

首先,為了能夠使用Cython,我們必須運(yùn)行:

1%load_ext Cython

現(xiàn)在,每當(dāng)我們想在代碼單元中運(yùn)行Cython時(shí),我們必須首先將以下magic命令放入單元格:

1%%cython

完成這些之后,就可以開(kāi)始編寫(xiě)Cython代碼了。

Cython跑得有多快?

與普通Python代碼相比,Cython的速度快多少實(shí)際上取決于代碼本身。例如,如果您正在運(yùn)行具有許多變量的計(jì)算開(kāi)銷較大的循環(huán),Cython將大大優(yōu)于常規(guī)Python代碼。遞歸函數(shù)也會(huì)使Cython比Python快很多。

讓我們用斐波那契數(shù)列來(lái)證明這一點(diǎn)。簡(jiǎn)單地說(shuō),這個(gè)算法通過(guò)把前兩個(gè)數(shù)相加找到下一個(gè)數(shù)。下面是Python中可能出現(xiàn)的情況:

如何用Cython加速Python代碼

我們來(lái)讓Python工作:

如何用Cython加速Python代碼

如大家看到的,找到序列中的第39個(gè)數(shù)字花費(fèi)了13.3秒。這里的wall time是指從函數(shù)調(diào)用開(kāi)始到結(jié)束所花費(fèi)的總時(shí)間。

讓我們?cè)贑ython中定義相同的函數(shù)。

如何用Cython加速Python代碼

這是怎么回事?正如你所看到的,我們正在使用一些單元魔法,使我們可以在這個(gè)單元中使用Cython。我將很快解釋“-a”選項(xiàng)的作用。然后,我們基本上使用與上面相同的代碼,只是現(xiàn)在我們能夠使用靜態(tài)類型聲明并將n定義為integer類型。

正如您所看到的,通過(guò)在magic命令后面添加’ -a ‘,我們收到了一些注釋,這些注釋向我們展示了代碼中有多少Python交互。這里的目標(biāo)是去掉所有的黃線,讓它們有一個(gè)白色的背景。在這種情況下,將不存在Python交互,所有代碼都將在C中運(yùn)行。您還可以單擊每行旁邊的“+”符號(hào),查看Python代碼的C轉(zhuǎn)換。

這個(gè)代碼快了多少?讓我們看看:

如何用Cython加速Python代碼

本例中,Cython的速度大約是Python的6.75倍。這清楚地展示了利用Cython節(jié)省時(shí)間的能力,與常規(guī)Python代碼相比,Cython提供了最大的改進(jìn)。

附加選項(xiàng)

如果您已經(jīng)了解C語(yǔ)言,Cython還允許訪問(wèn)C代碼,而Cython的創(chuàng)建者還沒(méi)有為這些代碼添加現(xiàn)成的聲明。例如,使用以下代碼,可以為C函數(shù)生成Python包裝器并將其添加到模塊dict中。

如何用Cython加速Python代碼

Cython證明了許多額外的功能,比如并行性,這些功能在文檔中都得到了很好的描述,您可以在這里找到這些功能。

結(jié)論

如果伙伴們有時(shí)遇到不得不等待太長(zhǎng)時(shí)間才能執(zhí)行python代碼的問(wèn)題,那么cython提供了一種非常靈活的集成和高效的方法來(lái)加速代碼的執(zhí)行。最重要的是,如果你對(duì)C稍微熟悉一點(diǎn),它提供了許多進(jìn)一步優(yōu)化代碼的功能。

看完上述內(nèi)容,你們對(duì)如何用Cython加速Python代碼有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

名稱欄目:如何用Cython加速Python代碼
文章源于:http://muchs.cn/article24/gehice.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、Google網(wǎng)站營(yíng)銷、標(biāo)簽優(yōu)化、云服務(wù)器、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)