溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用Cython加速Python代碼

發(fā)布時間:2021-10-26 10:42:10 來源:億速云 閱讀:371 作者:柒染 欄目:編程語言

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

如果你曾經用Python編寫過代碼,那么等待某些代碼塊執(zhí)行的時間可能比您希望的要長。雖然有一些方法可以提高代碼的效率,但它很可能仍然比C代碼慢。這主要歸結為一個事實:Python是一種動態(tài)編程語言,它將許多東西移動到C在編譯期間負責的運行時。

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

安裝Cython

為了能夠使用Cython,您需要一個C編譯器。因此,安裝過程會根據(jù)您當前的操作系統(tǒng)而有所不同。對于Linux,通常存在GNUC編譯器(gncc)。對于Mac OS,您可以下載Xcode來獲得gncc。如果您應該使用Windows,安裝過程會稍微復雜一些。更多信息請訪問Cython’s GitHub。

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

1pip install Cython

如何使用Cython

演示Cython功能的最簡單方法是通過Jupyter Notebooks。要在我們的筆記本中使用Cython,我們將使用IPython magic命令。Magic命令以百分號開始,并提供一些額外的功能,這些功能可以增強工作流。通常,有兩種類型的Magic命令:

  1. 行magic由單個“%”表示,并且只在一行輸入進行操作

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

讓我們開始:

首先,為了能夠使用Cython,我們必須運行:

1%load_ext Cython

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

1%%cython

完成這些之后,就可以開始編寫Cython代碼了。

Cython跑得有多快?

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

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

如何用Cython加速Python代碼

我們來讓Python工作:

如何用Cython加速Python代碼

如大家看到的,找到序列中的第39個數(shù)字花費了13.3秒。這里的wall time是指從函數(shù)調用開始到結束所花費的總時間。

讓我們在Cython中定義相同的函數(shù)。

如何用Cython加速Python代碼

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

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

這個代碼快了多少?讓我們看看:

如何用Cython加速Python代碼

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

附加選項

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

如何用Cython加速Python代碼

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

結論

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

看完上述內容,你們對如何用Cython加速Python代碼有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI