亚洲国产成人精品久久_欧美日韩国产综合一区二区_亚洲精品理论电影_色综合久久中文字幕

面對超高速復雜邏輯束手無策?試試Julia吧!

放大字體  縮小字體 發(fā)布日期:2020-01-08  來源:來自互聯(lián)網(wǎng)  作者:來自互聯(lián)網(wǎng)  瀏覽次數(shù):759
導讀

事實上,這個問題總是認為人們所談論的是Julia與某種優(yōu)化/矢量化Python代碼(如Numpy函數(shù)所使用的)之間的對比。它是一個擁有超優(yōu)化函數(shù)(大多已預編譯)的庫,專注于為Python用戶提供(對數(shù)…

全文共3967字,預計學習時長12分鐘

全文共3967字,預計學習時長12分鐘

圖源:Unsplash

Julia是什么?

“操作似Python,運行如C語言”。

沒錯,這就是Julia素有的口號。

Julia作為一種現(xiàn)代編程語言,主攻科學計算,它是一種靈活的動態(tài)型語言,其性能可與傳統(tǒng)的靜態(tài)型語言相媲美。目前其追隨者和使用其的開發(fā)人員日益增多。

Julia試圖提供一種單一環(huán)境,此環(huán)境的生產(chǎn)能力足以進行原型設計,并能有效地應用于工業(yè)級應用程序。它是一種多范式語言,其中包含函數(shù)式和面向?qū)ο笫骄幊探M件,盡管大多數(shù)的用戶都喜歡其函數(shù)式編程的功能。

該編程語言的起源可追溯至2009年。首席開發(fā)人員Alan Edelman、Jeff Bezanson、Stefan Karpinski和Viral Shah著手創(chuàng)建該語言,以用于更快更好的數(shù)值計算。2012年2月,開發(fā)人員發(fā)布了該語言的一個商業(yè)版本。

為什么Julia對數(shù)據(jù)科學而言如此優(yōu)越?

Julia是數(shù)據(jù)科學和機器學習工作的最佳選擇,兩者原因大致相同,即它在數(shù)值快速計算方面最為適用。優(yōu)點如下:

· 平滑的學習曲線和大量的基礎功能。特別是,如果你已經(jīng)很熟悉如Python、R語言等更為熱門的數(shù)據(jù)科學語言后,學習Julia就好似在公園中散步一樣容易?!?性能:Julia最初是一種編譯語言,而Python和R語言是解釋語言。這就意味著Julia代碼以可直接處理代碼的形式在處理器上運行。· GPU支持:這與性能直接相關。GPU支持由某些軟件包,如TensorFlow.jl和MXNet.jl公開控制。· 分布式和并行式計算支持:Julia使用多種拓撲公開執(zhí)行并行式與分布式計算。它還支持協(xié)同程序,比如在GO編程語言中,協(xié)同程序是在多核架構(gòu)中并行工作的輔助函數(shù)。Julia廣泛支持線程和同步旨在最優(yōu)化性能、降低競爭風險?!?豐富的數(shù)據(jù)科學與可視化庫:Julia社區(qū)認為其是數(shù)據(jù)科學家和統(tǒng)計學家的首選語言。因此,主攻數(shù)據(jù)科學與分析的高性能庫一直處于開發(fā)狀態(tài)?!?團隊合作(與其它語言/框架共同使用):在數(shù)據(jù)科學和機器學習領域,Julia和其它成熟語言及框架的兼容性相當好。使用PyCall或RCall可以在Julia腳本中使用本地Python或R語言代碼。Plots包可以與包括Matplotlib和Plotly的各種端協(xié)同工作。Scikit-learn或TensorFlow等熱門機器學習庫已經(jīng)具有類似Julia的語言或包裝器?!?用戶友好的界面:不論是在本地還是云上,Julia 的用戶界面都非常友好,在所有的流程中,用戶與 Julia 的交流都非常順暢。Julia 還對所有的功能和數(shù)據(jù)類型提供了方便易用的幫助文件。· 與其他語言無縫對接:這些語言包括(但不限于)R、Python 和 C。這使你不需要進行完整的遷移,就可以使用現(xiàn)有的代碼庫。

綜上,Julia是數(shù)據(jù)科學和機器學習工作的最佳選擇,兩者原因大致相同,即它在數(shù)值快速計算方面最為適用。

具體案例與比較,Julia優(yōu)勢一目了然

使用Python腳本進行基準測試 有關“Julia比Python速度快嗎?”這一問題存在諸多爭議。 與生活中其它事情類似,答案是:視情況而定。

圖源:Unsplash

官方Julia語言門戶網(wǎng)站上有些相關數(shù)據(jù),盡管基準測試是針對Python以外的各種語言進行的。

事實上,這個問題總是認為人們所談論的是Julia與某種優(yōu)化/矢量化Python代碼(如Numpy函數(shù)所使用的)之間的對比。否則,本地Julia由于執(zhí)行編譯代碼,速度幾乎總是比Python快。同時,本地Python比執(zhí)行Numpy類型慢得多。

Numpy速度真的很快。它是一個擁有超優(yōu)化函數(shù)(大多已預編譯)的庫,專注于為Python用戶提供(對數(shù)據(jù)科學家和機器學習工程師特別有用)接近C語言的速度。簡單的Numpy函數(shù),如求和或標準差函數(shù)可以較好地匹配或打敗Julia等效組件(特別是較大的數(shù)組)。

然而,想要充分利用Numpy函數(shù),必須要考慮代碼的矢量化。在程序中,一直以矢量化代碼的形式編寫復雜邏輯很不容易。

因此,在將復雜邏輯應用于某種處理數(shù)組的情況下時,應該對Julia進行速度對比。

本文中將展示幾組相似例子以對這一點進行解釋。

然而,想要充分利用Numpy函數(shù),必須要考慮將代碼矢量化。

對于for循環(huán),Julia遠勝于Python

計算一百萬個隨機整數(shù)的和以驗證這一點。

Julia代碼如下。此函數(shù)所需時長稍多于1毫秒。

Python代碼如下。我們保留代碼的函數(shù)特性(Julia是函數(shù)語言)以保持對比的公平性,且便于驗證。For循環(huán)所需時長竟超過200毫秒!

但如何將Julia數(shù)組與Numpy數(shù)組進行比較呢? 在以上代碼中,創(chuàng)建一個數(shù)組變量。對于數(shù)據(jù)科學而言,這就是Julia中用途最大的數(shù)據(jù)結(jié)構(gòu),因為它能直接進行統(tǒng)計計算或線性代數(shù)運算。

無需單獨的庫或任何東西。Julia數(shù)組比Python列表快好幾個數(shù)量級。 但是,Numpy數(shù)組速度很快,一起對同樣的求和運算進行基準測試。

下方的Julia代碼使用數(shù)組上的sum()函數(shù)。它花費的時長約為451微秒(比for循環(huán)方法快,但只有一半的時間)。

下圖是由Numpy執(zhí)行。

天哪!Numpy僅需353微秒,它的速度打敗了Julia,而且比本地的Python for循環(huán)代碼快了近628倍。 所以,這一有利于Numpy的結(jié)論已經(jīng)確定了嗎?

還沒那么快。如果只想求出數(shù)組中奇數(shù)之和呢?

無需單獨的庫或任何東西。Julia數(shù)組比Python列表快好幾個數(shù)量級。

請看邏輯

對Julia而言,代碼更改相當簡單。本文將只使用for循環(huán),檢查數(shù)組中的元素是否能被2整除,如果不能(奇數(shù)),則將其添加至運行總和之中。盡可能地學究一點!

所以,這需要運行近4毫秒。

的確是比盲和(使用for循環(huán))慢,但也沒慢太多(for循環(huán)的純和約為1.1毫秒)。 現(xiàn)在,當然不能用這種速度與Python for循環(huán)競爭!結(jié)果顯而易見,不是嗎?所以,必須使用Numpy將代碼矢量化。

但是,該怎么檢查奇數(shù),然后在Numpy數(shù)組中對奇數(shù)求和呢?多虧有np.where()這一方法。

下圖是Python代碼。沒那么簡單(除非你知道如何正確使用np.where),是嗎?

但看一看速度。即使采用單行矢量化代碼的Numpy方法,平均用時也需16.7毫秒。

Julia代碼更為簡單,運行速度更快!

另一項略為復雜的運算

假設有三個數(shù)組(稱之為W、X和B),隨機浮點數(shù)在-2到2之間,想要計算一個特殊量:其中兩個數(shù)組的乘積與第三個數(shù)組相加,即A.X+B,但只有當元素的線性組合大于零時,才會將這個值添加到最終的和之中。

這個邏輯看著熟悉嗎?它是任何緊密連接的神經(jīng)網(wǎng)絡(甚至是單個感知器)的變體。其中權(quán)值、特征和偏差向量的線性組合必須超過某個閾值才能傳播到下一層。

下圖是Julia編碼。再一次地它的表現(xiàn)堪稱簡潔、完美。僅花費了約1.8毫秒。它使用了一個名為muladd()的特殊函數(shù),該函數(shù)將兩數(shù)字相乘并將數(shù)值與第三個數(shù)字相加。

使用Python以相似代碼(進行for循環(huán))進行嘗試,結(jié)果同預期一樣,慘不忍睹!平均花費時長超過1秒鐘。

再來一次,創(chuàng)新一下,使用Numpy矢量化代碼,結(jié)果比for循環(huán)案例要好得多,時長約為14.9毫秒,但還是不如Julia。

那么,結(jié)果如何呢?

至此,趨勢愈加明顯。對于數(shù)值運算,進行某些數(shù)學運算之前需要檢查復雜邏輯,Julia輕松地擊敗了Python(甚至Numpy),因為編寫邏輯時可以使用Julia中最簡單的代碼,然后把它忘掉。

得益于即時(JIT)編譯器和內(nèi)部類型相關優(yōu)化,它仍將以驚人的速度運行(Julia有一個極其復雜的類型系統(tǒng),可以使程序根據(jù)每個變量的正確數(shù)據(jù)類型快速運行,并優(yōu)化代碼和相應內(nèi)存)。

使用本地Python數(shù)據(jù)結(jié)構(gòu)和for循環(huán)編寫相同代碼的速度非常慢。隨著復雜程度提高,即使使用Numpy矢量化代碼,速度也遠低于Julia。

Numpy非常適合已經(jīng)附帶如sum()或mean()或std()等簡單方法的數(shù)組,但使用這些方法的同時還需使用邏輯,這并不簡單,還會嚴重拖慢運算速度。

在Julia中,無需費心思考代碼的矢量化。即使是看起來很愚蠢的代碼,使用簡單的for循環(huán)和元素對元素的邏輯檢查,運行速度也會非???!

對于數(shù)值運算,進行某些數(shù)學運算之前需要檢查復雜邏輯,Julia輕松地擊敗了Python(甚至Numpy),因為編寫邏輯時可以使用Julia中最簡單的代碼,然后便無需在意。

總結(jié)

本文展示了Julia和Python本地代碼與已優(yōu)化的Numpy函數(shù)之間數(shù)值運算的比較基準測試。 盡管就簡單函數(shù)而言,Numpy與Julia的速度不相上下,但在計算問題中引入復雜邏輯時,Julia更勝一籌。Julia代碼的編寫十分簡單,無需考慮函數(shù)的向量化。 隨著數(shù)據(jù)科學與機器學習支持系統(tǒng)的不斷發(fā)展,Julia是未來最令人期待的新語言之一。它是一個工具,是初級數(shù)據(jù)科學家都應掌握的技能。

圖源:Unsplash

你心動了嗎?快來試試備受褒獎的Julia吧~ 使用 Julia 從零開始構(gòu)建一項完整的數(shù)據(jù)科學應用。

你準備好了嗎?

留言 點贊 發(fā)個朋友圈

我們一起分享AI學習與發(fā)展的干貨

如需轉(zhuǎn)載,請后臺留言,遵守轉(zhuǎn)載規(guī)范

 
 
免責聲明
本文為會員免費發(fā)布,僅代表發(fā)布者個人觀點,本站未對其內(nèi)容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔相應責任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們刪除處理。
 
 
主站蜘蛛池模板: 亚洲欧美日韩精品久久久| 国内自拍中文字幕| www日韩中文字幕在线看| 欧美一级免费看| 国产精品视频免费在线| 日韩高清国产精品| 久久精品人人做人人爽电影 | 亚洲91精品在线观看| 久久久国产一区二区三区| 日韩在线视频观看正片免费网站 | 隔壁老王国产在线精品| 91九色国产社区在线观看| 国产精品久久久久久久久粉嫩av| 欧美 日韩 国产在线| 日韩av一区二区三区在线观看| 91久久精品国产| 国产精品亚洲美女av网站| 久久久久福利视频| 国产精品美女www爽爽爽视频| 国产人妻互换一区二区| 国产偷久久久精品专区| 久久99九九| 欧美欧美一区二区| 欧美一区二区视频97| 日韩欧美一级在线| 日本一欧美一欧美一亚洲视频| 婷婷五月色综合| 亚洲人精品午夜射精日韩| 中文字幕日韩精品久久| y97精品国产97久久久久久| 99精品欧美一区二区三区| 国产精品美女久久久久久免费| 国产精品亚洲аv天堂网| 国产免费一区视频观看免费| 粉嫩av免费一区二区三区| 91精品视频在线看| 日韩精品无码一区二区三区免费| 日本一区二区在线播放| 欧美精品999| 久久国产精品久久精品国产| 狠狠干视频网站|