女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

import讓Python代碼速度提升百倍

OpenCV學堂 ? 來源:量子位 ? 作者:量子位 ? 2022-09-15 15:25 ? 次閱讀

	

眾所周知,Python的簡單和易讀性是靠犧牲性能為代價的——

尤其是在計算密集的情況下,比如多重for循環。

不過現在,大佬胡淵鳴說了:

只需import 一個叫做“Taichi”的庫,就可以把代碼速度提升100倍

不信?

來看三個例子。

計算素數的個數,速度x120

第一個例子非常非常簡單,求所有小于給定正整數N的素數。

標準答案如下:

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

我們將上面的代碼保存,運行。

當N為100萬時,需要2.235s得到結果:

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

現在,我們開始施魔法。

不用更改任何函數體,import“taichi”庫,然后再加兩個裝飾器:

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

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

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

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

不止如此,我們還可以在ti.init()中加個參數變為ti.init(arch=ti.gpu) ,讓taich在GPU上進行計算。

那么此時,計算所有小于1000萬的素數就只耗時0.45s了,與原來的Python代碼相比速度就提高了120倍

厲不厲害?

什么?你覺得這個例子太簡單了,說服力不夠?我們再來看一個稍微復雜一點的。

動態規劃,速度x500

動態規劃不用多說,作為一種優化算法,通過動態存儲中間計算結果來減少計算時間。

我們以經典教材《算法導論》中的經典動態規劃案例“最長公共子序列問題(LCS)”為例。

比如對于序列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]。

用動態規劃的思路計算LCS,就是先求解序列a的前i個元素和序列b的前j個元素的最長公共子序列的長度,然后逐步增加i或j的值,重復過程,得到結果。

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

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

完整代碼如下:

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

現在,我們用Taichi來加速:

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

結果如下:

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

胡淵鳴電腦上的程序最快做到了0.9秒內完成,而換成用NumPy來實現,則需要476秒,差異達到了超500倍!

最后,我們再來一個不一樣的例子。

反應 - 擴散方程,效果驚人

自然界中,總有一些動物身上長著一些看起來無序但實則并非完全隨機的花紋。

圖靈機的發明者艾倫·圖靈是第一個提出模型來描述這種現象的人。

在該模型中,兩種化學物質(U和V)模擬圖案的生成。這兩者之間的關系類似于獵物和捕食者,它們自行移動并有交互:

  1. 最初,U和V隨機分布在一個域上;

  2. 在每個時間步,它們逐漸擴散到鄰近空間;

  3. 當U和V相遇時,一部分U被V吞噬。因此,V的濃度增加;

  4. 為了避免U被V根除,我們在每個時間步添加一定百分比 (f) 的U并刪除一定百分比 (k) 的V。

上面這個過程被概述為“反應-擴散方程”:

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

其中有四個關鍵參數:Du(U的擴散速度),Dv(V的擴散速度),f(feed的縮寫,控制U的加入)和k(kill的縮寫,控制V的去除)

如果Taichi中實現這個方程,首先創建網格來表示域,用vec2表示每個網格中U, V的濃度值。

拉普拉斯算子數值的計算需要訪問相鄰網格。為了避免在同一循環中更新和讀取數據,我們應該創建兩個形狀相同的網格W×H×2。

每次從一個網格訪問數據時,我們將更新的數據寫入另一個網格,然后切換下一個網格。那么數據結構設計就是這樣:

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

一開始,我們將U在網格中的濃度設置為 1,并將V放置在50個隨機選擇的位置:

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

那么實際計算就可以用不到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

在這里,我們使用整數相位(0或1)來控制我們從哪個網格讀取數據。

最后一步就是根據V的濃度對結果進行染色,就可以得到這樣一個效果驚人的圖案?

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

而且和只能達到30fps左右的Numba實現比起來,Taichi實現由于可以選擇GPU作為后端,輕松超過了 300fps。

pip install即可安裝

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

其實,Taichi就是一個嵌入在Python中的DSL(動態腳本語言),它通過自己的編譯器將被 @ti.kernel 裝飾的函數編譯到各種硬件上,包括CPU和GPU,然后進行高性能計算。

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

正如其名,Taichi就出自太極圖形胡淵鳴的團隊,現在你只需要用pip install就能安裝這個庫,并與其他Python庫進行交互,包括NumPy、Matplotlib和PyTorch等等。

當然,Taichi用起來和這些庫以及其他加速方法有什么差別,胡淵鳴也給出了詳細的優缺點對比。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70249
  • python
    +關注

    關注

    56

    文章

    4825

    瀏覽量

    86169
  • import
    +關注

    關注

    0

    文章

    15

    瀏覽量

    2051

原文標題:胡淵鳴:import一個“太極”庫,讓Python代碼提速100倍!

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    中國成功研發出世界首臺擬態計算機 效能提升百倍

    擬態計算機的最大特點是高效能。測試表明,針對特定運算任務的能效比可提升數十到數百倍。盡管擁有巨大的發展潛力,但鄔院士表示,擬態計算機距離投入應用,還需要突破一些理論、工程問題。
    發表于 09-22 10:05 ?1353次閱讀

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

    在使用opa380時,經常出現原先正常工作的電路,突然信號值直線下降,輸出信號衰減十到百倍,但是變化趨勢一致,不可恢復,更換opa380芯片后正常
    發表于 07-29 06:51

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

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

    英研發新型存儲器 速度比閃存快百倍

      英國研究人員最近報告說,他們研發出一種基于“電阻性記憶體”的新型存儲設備,與現在廣泛使用的閃存相比,耗電量更低,而存取速度要快上一百倍
    發表于 05-21 08:45 ?587次閱讀

    英研發出比閃存快百倍的新型存儲器

    英國研究人員最近報告說,他們研發出一種基于“電阻性記憶體”的新型存儲設備,與現在廣泛使用的閃存相比,耗電量更低,而存取速度要快上一百倍
    發表于 05-21 11:22 ?789次閱讀

    三星5G網絡 速度為4G數百倍下電影僅1秒

    5G網絡比現行4G網絡的傳輸速度快數百倍,整部超高畫質電影可在1秒之內下載完成。隨著5G技術的誕生,用智能終端分享3D電影、游戲以及超高畫質(UHD)節目的時代已向我們走來。
    發表于 06-17 09:31 ?1847次閱讀

    區塊鏈技術的出現為游戲市場帶來了增長十百倍的可能性

    在區塊鏈游戲分發平臺BlockGame看來,目前游戲行業正處于瓶頸期,區塊鏈技術的出現為游戲市場帶來了增長十百倍的可能性。
    發表于 10-09 11:35 ?863次閱讀

    什么樣的幣可能是百倍

    百倍幣顧名思義就是幣價會從最初的募資階段到某個時點上漲百倍,而幣價要上漲百倍也就意味著市值大概也要上漲百倍
    發表于 07-18 14:41 ?5225次閱讀

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

    馬云親自推進的人工智能項目有了重大突破。據介紹,該項目用于攻克心血管,比之傳統醫療手段能提速百倍
    發表于 08-19 09:11 ?1962次閱讀

    Cloudam云端如何助力企業實現計算效率數百倍提升

    近日,Cloudam云端與國內某知名藥企與合作,通過接入Cloudam云端自主研發的云E云超算服務,計算效率提高的數百倍。這也是云算力在生命科學領域的又一次成功應用。Cloudam云端云E云超算服務是如何幫助該藥企實現計算效率數百倍
    發表于 03-17 10:53 ?482次閱讀

    簡述python包模塊import和from及all

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

    淺析python模塊創建和from及import使用

    python模塊通過用python程序編寫的.py文件即可創建,通過from及import語句導入模塊來使用。
    的頭像 發表于 02-21 14:44 ?1077次閱讀

    import模塊的導入方法

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

    rom…import導入代碼介紹

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

    如何實現__import__()動態導入

    import () 動態導入 import 語句本質上就是調用內置函數 import (),我們可以通過它實現動態導入 實操代碼: 使用 impor
    的頭像 發表于 09-11 17:38 ?1384次閱讀