日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
用Cython加速Python代碼,速度溜到飛起

介紹

在潛江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),潛江網(wǎng)站建設(shè)費(fèi)用合理。

如果你曾用Python編寫代碼,那么你可能花了更多的時(shí)間等待某些代碼塊的執(zhí)行,而不是你想要的。雖然有一些方法可以使您的代碼更有效,但它很可能仍然比C代碼慢。這主要?dú)w結(jié)為Python是一種動(dòng)態(tài)編程語言,并將許多東西移動(dòng)到C語言編譯期間處理的運(yùn)行時(shí)。

不過,如果你像我一樣喜歡用Python編寫代碼并且仍想加速你代碼,你可以考慮使用Cython。雖然Cython本身是一種獨(dú)立的編程語言,但很容易將其整合到例如Jupyter筆記本工作流程。在執(zhí)行時(shí),Cython將您的Python代碼轉(zhuǎn)換為C,通常會(huì)顯著加快它的速度。

安裝Cython

為了能夠使用Cython,您將需要一個(gè)C編譯器。因此,安裝過程會(huì)因您當(dāng)前的操作系統(tǒng)而異。對(duì)于Linux,通常存在GNU C編譯器(gncc)。對(duì)于Mac OS,您可以下載Xcode以獲取gncc。如果您應(yīng)該使用Windows,則安裝過程會(huì)稍微復(fù)雜一些。

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

 
 
 
 
  1. pip install Cython

如何使用Cython

演示Cython功能的最簡(jiǎn)單方法是通過Jupyter筆記本。要在我們的筆記本中使用Cython,我們將使用IPython魔術(shù)命令。 Magic命令以百分號(hào)開頭,并提供一些可以增強(qiáng)工作流程的附加功能。通常,有兩種類型的魔術(shù)命令:

  1. 線條魔法由單個(gè)'%'表示,并且僅在一行輸入上操作
  2. 單元格魔術(shù)用兩個(gè)'%'表示,并在多行輸入上操作。

讓我們開始吧:

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

 
 
 
 
  1. %load_ext Cython

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

 
 
 
 
  1. %%cython

一旦你完成了,你就可以開始在Cython中開始編碼了。

Cython的速度有多快?

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

讓我們用Fibonacci序列來證明這一點(diǎn)。簡(jiǎn)單地說,這個(gè)算法通過將前兩個(gè)數(shù)字相加來找到下一個(gè)數(shù)字。以下是Python中的內(nèi)容:

 
 
 
 
  1. def fibonacci(n):
  2.  if n < 0:
  3.  print("1st fibonacci number = 0")
  4.  elif n == 1:
  5.  return 
  6.  elif n == 2:
  7.  return 1
  8.  else:
  9.  return fibonacci(n-1) + fibonacci(n-2)

讓Python工作:

如您所見,在序列中找到第39個(gè)數(shù)字需要13.3秒來計(jì)算。此處的掛起時(shí)間是指從調(diào)用該函數(shù)開始到結(jié)束所用的總時(shí)間。

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

這里發(fā)生了什么?正如您所看到的,我們正在使用一些單元格魔術(shù),允許我們?cè)诖藛卧裰惺褂肅ython。我將很快解釋'-a'選項(xiàng)的作用。然后,我們基本上采用與上面相同的代碼,除了現(xiàn)在我們能夠使用靜態(tài)類型聲明并將n定義為整數(shù)類型這一事實(shí)。

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

這段代碼多快了多少?我們來看看:

在這種情況下,Cython比Python快約6.75倍。這清楚地展示了利用Cython節(jié)省時(shí)間的能力,它提供了比常規(guī)Python代碼最大的改進(jìn)。

其他選項(xiàng)

如果您已經(jīng)知道C、Cython還允許訪問C代碼,Cython的制造商尚未添加即用型聲明。例如,使用以下代碼,您可以為C函數(shù)生成Python包裝器,并將其添加到模塊dict中。

 
 
 
 
  1. %%cython
  2. cdef extern from "math.h":
  3.  cpdef double sin(double x)

Cython證明了許多其他功能,例如并行性,這些功能在其文檔中描述非常簡(jiǎn)潔。

結(jié)論

如果您有時(shí)遇到不得不等待太長(zhǎng)時(shí)間才能執(zhí)行Python代碼的問題,Cython提供了一種非常整齊且高效的方法來加速您的代碼。最重要的是,它提供了許多進(jìn)一步優(yōu)化您的合作的功能。


當(dāng)前標(biāo)題:用Cython加速Python代碼,速度溜到飛起
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/djphdcs.html