99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

import讓Python代碼速度提升百倍

OpenCV學(xué)堂 ? 來(lái)源:量子位 ? 作者:量子位 ? 2022-09-15 15:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


	

眾所周知,Python的簡(jiǎn)單和易讀性是靠犧牲性能為代價(jià)的——

尤其是在計(jì)算密集的情況下,比如多重for循環(huán)。

不過(guò)現(xiàn)在,大佬胡淵鳴說(shuō)了:

只需import 一個(gè)叫做“Taichi”的庫(kù),就可以把代碼速度提升100倍!

不信?

來(lái)看三個(gè)例子。

計(jì)算素?cái)?shù)的個(gè)數(shù),速度x120

第一個(gè)例子非常非常簡(jiǎn)單,求所有小于給定正整數(shù)N的素?cái)?shù)。

標(biāo)準(zhǔn)答案如下:

31bfd76c-31eb-11ed-ba43-dac502259ad0.png

我們將上面的代碼保存,運(yùn)行。

當(dāng)N為100萬(wàn)時(shí),需要2.235s得到結(jié)果:

31cecd76-31eb-11ed-ba43-dac502259ad0.png

現(xiàn)在,我們開(kāi)始施魔法。

不用更改任何函數(shù)體,import“taichi”庫(kù),然后再加兩個(gè)裝飾器:

31d5e872-31eb-11ed-ba43-dac502259ad0.png

Bingo!同樣的結(jié)果只要0.363s,快了將近6倍。

31e02a8a-31eb-11ed-ba43-dac502259ad0.png

如果N=1000萬(wàn),則只要0.8s;要知道,不加它可是55s,一下子又快了70倍!

不止如此,我們還可以在ti.init()中加個(gè)參數(shù)變?yōu)閠i.init(arch=ti.gpu) ,讓taich在GPU上進(jìn)行計(jì)算。

那么此時(shí),計(jì)算所有小于1000萬(wàn)的素?cái)?shù)就只耗時(shí)0.45s了,與原來(lái)的Python代碼相比速度就提高了120倍!

厲不厲害?

什么?你覺(jué)得這個(gè)例子太簡(jiǎn)單了,說(shuō)服力不夠?我們?cè)賮?lái)看一個(gè)稍微復(fù)雜一點(diǎn)的。

動(dòng)態(tài)規(guī)劃,速度x500

動(dòng)態(tài)規(guī)劃不用多說(shuō),作為一種優(yōu)化算法,通過(guò)動(dòng)態(tài)存儲(chǔ)中間計(jì)算結(jié)果來(lái)減少計(jì)算時(shí)間。

我們以經(jīng)典教材《算法導(dǎo)論》中的經(jīng)典動(dòng)態(tài)規(guī)劃案例“最長(zhǎng)公共子序列問(wèn)題(LCS)”為例。

比如對(duì)于序列a = [0, 1, 0, 2, 4, 3, 1, 2, 1]和序列b = [4, 0, 1, 4, 5, 3, 1, 2],它們的LCS就是:

LCS(a, b) = [0, 1, 4, 3, 1, 2]。

用動(dòng)態(tài)規(guī)劃的思路計(jì)算LCS,就是先求解序列a的前i個(gè)元素和序列b的前j個(gè)元素的最長(zhǎng)公共子序列的長(zhǎng)度,然后逐步增加i或j的值,重復(fù)過(guò)程,得到結(jié)果。

我們用f[i, j]來(lái)指代這個(gè)子序列的長(zhǎng)度,即LCS((prefix(a, i), prefix(b, j)。其中prefix(a, i) 表示序列a的前i個(gè)元素,即a[0], a[1], …, a[i - 1],得到如下遞歸關(guān)系:

31fa953c-31eb-11ed-ba43-dac502259ad0.png

完整代碼如下:

32261392-31eb-11ed-ba43-dac502259ad0.png

現(xiàn)在,我們用Taichi來(lái)加速:

32316864-31eb-11ed-ba43-dac502259ad0.png

結(jié)果如下:

32406c24-31eb-11ed-ba43-dac502259ad0.png

胡淵鳴電腦上的程序最快做到了0.9秒內(nèi)完成,而換成用NumPy來(lái)實(shí)現(xiàn),則需要476秒,差異達(dá)到了超500倍!

最后,我們?cè)賮?lái)一個(gè)不一樣的例子。

反應(yīng) - 擴(kuò)散方程,效果驚人

自然界中,總有一些動(dòng)物身上長(zhǎng)著一些看起來(lái)無(wú)序但實(shí)則并非完全隨機(jī)的花紋。

圖靈機(jī)的發(fā)明者艾倫·圖靈是第一個(gè)提出模型來(lái)描述這種現(xiàn)象的人。

在該模型中,兩種化學(xué)物質(zhì)(U和V)來(lái)模擬圖案的生成。這兩者之間的關(guān)系類(lèi)似于獵物和捕食者,它們自行移動(dòng)并有交互:

  1. 最初,U和V隨機(jī)分布在一個(gè)域上;

  2. 在每個(gè)時(shí)間步,它們逐漸擴(kuò)散到鄰近空間;

  3. 當(dāng)U和V相遇時(shí),一部分U被V吞噬。因此,V的濃度增加;

  4. 為了避免U被V根除,我們?cè)诿總€(gè)時(shí)間步添加一定百分比 (f) 的U并刪除一定百分比 (k) 的V。

上面這個(gè)過(guò)程被概述為“反應(yīng)-擴(kuò)散方程”:

325c11cc-31eb-11ed-ba43-dac502259ad0.png

其中有四個(gè)關(guān)鍵參數(shù):Du(U的擴(kuò)散速度),Dv(V的擴(kuò)散速度),f(feed的縮寫(xiě),控制U的加入)和k(kill的縮寫(xiě),控制V的去除)

如果Taichi中實(shí)現(xiàn)這個(gè)方程,首先創(chuàng)建網(wǎng)格來(lái)表示域,用vec2表示每個(gè)網(wǎng)格中U, V的濃度值。

拉普拉斯算子數(shù)值的計(jì)算需要訪問(wèn)相鄰網(wǎng)格。為了避免在同一循環(huán)中更新和讀取數(shù)據(jù),我們應(yīng)該創(chuàng)建兩個(gè)形狀相同的網(wǎng)格W×H×2。

每次從一個(gè)網(wǎng)格訪問(wèn)數(shù)據(jù)時(shí),我們將更新的數(shù)據(jù)寫(xiě)入另一個(gè)網(wǎng)格,然后切換下一個(gè)網(wǎng)格。那么數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)就是這樣:

326a2708-31eb-11ed-ba43-dac502259ad0.png

一開(kāi)始,我們將U在網(wǎng)格中的濃度設(shè)置為 1,并將V放置在50個(gè)隨機(jī)選擇的位置:

32790eb2-31eb-11ed-ba43-dac502259ad0.png

那么實(shí)際計(jì)算就可以用不到10行代碼完成:

@ti.kernel
defcompute(phase:int):
fori,jinti.ndrange(W,H):
cen=uv[phase,i,j]
lapl=uv[phase,i+1,j]+uv[phase,i,j+1]+uv[phase,i-1,j]+uv[phase,i,j-1]-4.0*cen
du=Du*lapl[0]-cen[0]*cen[1]*cen[1]+feed*(1-cen[0])
dv=Dv*lapl[1]+cen[0]*cen[1]*cen[1]-(feed+kill)*cen[1]
val=cen+0.5*tm.vec2(du,dv)
uv[1-phase,i,j]=val

在這里,我們使用整數(shù)相位(0或1)來(lái)控制我們從哪個(gè)網(wǎng)格讀取數(shù)據(jù)。

最后一步就是根據(jù)V的濃度對(duì)結(jié)果進(jìn)行染色,就可以得到這樣一個(gè)效果驚人的圖案?

?有趣的是,胡淵鳴介紹,即使V的初始濃度是隨機(jī)設(shè)置的,但每次都可以得到相似的結(jié)果。

而且和只能達(dá)到30fps左右的Numba實(shí)現(xiàn)比起來(lái),Taichi實(shí)現(xiàn)由于可以選擇GPU作為后端,輕松超過(guò)了 300fps。

pip install即可安裝

看完上面三個(gè)例子,你這下相信了吧?

其實(shí),Taichi就是一個(gè)嵌入在Python中的DSL(動(dòng)態(tài)腳本語(yǔ)言),它通過(guò)自己的編譯器將被 @ti.kernel 裝飾的函數(shù)編譯到各種硬件上,包括CPU和GPU,然后進(jìn)行高性能計(jì)算。

有了它,你無(wú)需再羨慕C++/CUDA的性能。

正如其名,Taichi就出自太極圖形胡淵鳴的團(tuán)隊(duì),現(xiàn)在你只需要用pip install就能安裝這個(gè)庫(kù),并與其他Python庫(kù)進(jìn)行交互,包括NumPy、Matplotlib和PyTorch等等。

當(dāng)然,Taichi用起來(lái)和這些庫(kù)以及其他加速方法有什么差別,胡淵鳴也給出了詳細(xì)的優(yōu)缺點(diǎn)對(duì)比。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70772
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86796
  • import
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    2076

原文標(biāo)題:胡淵鳴:import一個(gè)“太極”庫(kù),讓Python代碼提速100倍!

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    中國(guó)成功研發(fā)出世界首臺(tái)擬態(tài)計(jì)算機(jī) 效能提升數(shù)百倍

    擬態(tài)計(jì)算機(jī)的最大特點(diǎn)是高效能。測(cè)試表明,針對(duì)特定運(yùn)算任務(wù)的能效比可提升數(shù)十到數(shù)百倍。盡管擁有巨大的發(fā)展?jié)摿?,但鄔院士表示,擬態(tài)計(jì)算機(jī)距離投入應(yīng)用,還需要突破一些理論、工程問(wèn)題。
    發(fā)表于 09-22 10:05 ?1363次閱讀

    opa380異常損壞,放大倍數(shù)衰減十到百倍,不可恢復(fù),為什么?

    在使用opa380時(shí),經(jīng)常出現(xiàn)原先正常工作的電路,突然信號(hào)值直線下降,輸出信號(hào)衰減十到百倍,但是變化趨勢(shì)一致,不可恢復(fù),更換opa380芯片后正常
    發(fā)表于 07-29 06:51

    速度提升百倍 美科學(xué)家在4英寸基體上制成石墨薄膜

    速度提升百倍 美科學(xué)家在4英寸基體上制成石墨薄膜  美國(guó)賓夕法尼亞州立大學(xué)光電材料中心(Electro-Optics Center Materials Division:EOC)的研究人員最近成功地在4英寸(100mm)大
    發(fā)表于 02-05 10:22 ?566次閱讀

    英研發(fā)新型存儲(chǔ)器 速度比閃存快百倍

      英國(guó)研究人員最近報(bào)告說(shuō),他們研發(fā)出一種基于“電阻性記憶體”的新型存儲(chǔ)設(shè)備,與現(xiàn)在廣泛使用的閃存相比,耗電量更低,而存取速度要快上一百倍
    發(fā)表于 05-21 08:45 ?595次閱讀

    英研發(fā)出比閃存快百倍的新型存儲(chǔ)器

    英國(guó)研究人員最近報(bào)告說(shuō),他們研發(fā)出一種基于“電阻性記憶體”的新型存儲(chǔ)設(shè)備,與現(xiàn)在廣泛使用的閃存相比,耗電量更低,而存取速度要快上一百倍。
    發(fā)表于 05-21 11:22 ?799次閱讀

    三星5G網(wǎng)絡(luò) 速度為4G數(shù)百倍下電影僅1秒

    5G網(wǎng)絡(luò)比現(xiàn)行4G網(wǎng)絡(luò)的傳輸速度快數(shù)百倍,整部超高畫(huà)質(zhì)電影可在1秒之內(nèi)下載完成。隨著5G技術(shù)的誕生,用智能終端分享3D電影、游戲以及超高畫(huà)質(zhì)(UHD)節(jié)目的時(shí)代已向我們走來(lái)。
    發(fā)表于 06-17 09:31 ?1875次閱讀

    區(qū)塊鏈技術(shù)的出現(xiàn)為游戲市場(chǎng)帶來(lái)了增長(zhǎng)十百倍的可能性

    在區(qū)塊鏈游戲分發(fā)平臺(tái)BlockGame看來(lái),目前游戲行業(yè)正處于瓶頸期,區(qū)塊鏈技術(shù)的出現(xiàn)為游戲市場(chǎng)帶來(lái)了增長(zhǎng)十百倍的可能性。
    發(fā)表于 10-09 11:35 ?889次閱讀

    什么樣的幣可能是百倍

    百倍幣顧名思義就是幣價(jià)會(huì)從最初的募資階段到某個(gè)時(shí)點(diǎn)上漲百倍,而幣價(jià)要上漲百倍也就意味著市值大概也要上漲百倍。
    發(fā)表于 07-18 14:41 ?5297次閱讀

    AI醫(yī)療心血管的攻克將使醫(yī)療手段提速百倍

    馬云親自推進(jìn)的人工智能項(xiàng)目有了重大突破。據(jù)介紹,該項(xiàng)目用于攻克心血管,比之傳統(tǒng)醫(yī)療手段能提速百倍。
    發(fā)表于 08-19 09:11 ?1975次閱讀

    Cloudam云端如何助力企業(yè)實(shí)現(xiàn)計(jì)算效率數(shù)百倍提升

    近日,Cloudam云端與國(guó)內(nèi)某知名藥企與合作,通過(guò)接入Cloudam云端自主研發(fā)的云E云超算服務(wù),計(jì)算效率提高的數(shù)百倍。這也是云算力在生命科學(xué)領(lǐng)域的又一次成功應(yīng)用。Cloudam云端云E云超算服務(wù)是如何幫助該藥企實(shí)現(xiàn)計(jì)算效率數(shù)百倍
    發(fā)表于 03-17 10:53 ?497次閱讀

    簡(jiǎn)述python包模塊import和from及all

    python指定導(dǎo)入目錄路徑,稱為包導(dǎo)入。 通過(guò)import和from導(dǎo)入包模塊。 通過(guò)**all**指定導(dǎo)入的模塊和導(dǎo)入的模塊屬性。 ## 1.1 pythonimpo
    的頭像 發(fā)表于 02-21 14:20 ?1496次閱讀

    淺析python模塊創(chuàng)建和from及import使用

    python模塊通過(guò)用python程序編寫(xiě)的.py文件即可創(chuàng)建,通過(guò)from及import語(yǔ)句導(dǎo)入模塊來(lái)使用。
    的頭像 發(fā)表于 02-21 14:44 ?1158次閱讀

    import模塊的導(dǎo)入方法

    import 加載的模塊分為四種類(lèi)型: 使用python編寫(xiě)的代碼 .py 文件 已被編譯為共享庫(kù)或 DLL 的C或C++擴(kuò)展 一組模塊的包 使用C編寫(xiě)并鏈接到python解釋器的
    的頭像 發(fā)表于 09-11 17:31 ?1740次閱讀

    rom…import導(dǎo)入代碼介紹

    不知道你導(dǎo)入什么名字,很有可能會(huì)覆蓋掉你之前已經(jīng)定義的名字。而且可讀性極其的差, 一般生產(chǎn)環(huán)境中盡量避免使用 實(shí)操代碼: from math import pi , sin print ( sin
    的頭像 發(fā)表于 09-11 17:35 ?1256次閱讀

    如何實(shí)現(xiàn)__import__()動(dòng)態(tài)導(dǎo)入

    import () 動(dòng)態(tài)導(dǎo)入 import 語(yǔ)句本質(zhì)上就是調(diào)用內(nèi)置函數(shù) import (),我們可以通過(guò)它實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入 實(shí)操代碼: 使用 impor
    的頭像 發(fā)表于 09-11 17:38 ?1465次閱讀