本文做者從速度、通用性、多重派發、適用於 ML 的程度和包管理器 5 個方面闡述了 Julia 語言相較於 Python 的優點所在。
選自medium,做者:Emmett Boudreau,機器之心編譯,參與:杜偉、張倩、肖清。
編程
Julia 是一種多範式的函數式編程語言,用於機器學習和統計編程。儘管 Python 一般被認爲是一種面向對象的編程語言,其實它也是用於機器學習的多範式編程語言。須要注意的是,Julia 語言更多地基於函數範式。此外,Julia 語言雖不如 Python 那麼流行,但在數據科學中使用 Julia 具備很大的優點,從而使它在不少狀況下成爲更好的編程語言選擇。bash
下文將從五個方面介紹 Julia 的優點所在。機器學習
首先是速度,這是 Julia 語言引覺得傲的一個重要方面。與 Python 須要解釋器來執行代碼不一樣,Julia 主要是依託自身實現編譯。另外一方面,與 C 語言等其餘編譯語言也不一樣的是,Julia 在運行時進行編譯,而傳統語言則是在執行前進行編譯。若是 Julia 語言編寫地很是好,它的速度與 C 語言至關、有時甚至能夠超過 C 語言。Julia 語言使用即時編譯器 Just In Time(JIT)compiler,它的編譯速度很是快,儘管它編譯時更像是一種解釋型語言而非 C 或 Fortran 等傳統低級編譯語言。編程語言
咱們都知道通用性是 Python 語言相較於 Julia 語言的一個優點,確實有不少經過 Python 語言編寫的項目沒法使用 Julia 來實現。固然以上僅針對編程語言自己而言,咱們這裏提到的通用性是指可以與其餘語言混合編程。Julia 代碼廣泛可以在 R、Latex、Python 和 C 等語言中直接運行。這意味着典型的數據科學項目具備一旦被編寫完成並在 Julia 本地進行編譯後,在其餘編程語言中做爲封裝類或僅傳遞字符串使用的潛力。函數式編程
PyCall 和 RCall 也是 Julia 語言的兩大優點。考慮到 Julia 語言一大缺點在於包的豐富程度不及 Python 或 R 語言,利用 PyCall 和 RCall 在 Julia 代碼中隨時調用 Python 和 R 爲用戶提供了極大的便利。PyCall 在 Julia 語言中獲得了很好地實現,而且也很是有用。函數
Julia 是一種很是獨特的類型化語言,具備本身的執行模式和特徵,但其中一個很是酷的特徵是它的多重派發。首先,Julia 的多重派發速度很是快。除此以外,使用 Julia 的多態派發可以將函數定義應用爲結構屬性。這使得繼承(inheritance)在 Julia 內部可行。不只如此,使用 Julia 的多重派發還能夠實現函數的擴展,這對於包擴展來講好處多多,由於不管何時顯式地導入 method,用戶均可以對它進行更改。所以,用戶能夠很容易地顯式導入本身的 method,並選擇相應結構將它擴展爲一個新的函數。學習
與 Python 不一樣,Julia 語言的目的是應用於統計學和機器學習領域。Python 語言則建立於 20 世紀 90 年代早期,是一種面向對象的語言,而且自此以後也改變了不少。儘管 Python 具備很長的發展歷史以及普遍的應用範圍,但使用一種專門建立用於高級統計工做的語言可以帶來很大的好處。spa
我認爲在線性代數中使用 Julia 要好於 Python。原生的 Python 只能緩慢完成線性代數,而原生的 Julia 能夠飛快地完成。這是由於,Python 最開始並非開發來用於支持與機器學習相關的全部矩陣和方程運算的。這並不意味着 Python 很差,特別是當有了 NumPy 擴展庫以後。但就不導入額外擴展庫而言,Julia 更適合於這類數學運算。此外,與 Python 相比,Julia 的操做數系統與 R 語言的更爲相近。使用 Julia 語言可以更快速、更容易地完成大多數線性代數運算,如如下代碼所示:code
Python -> y = np.dot(array1,array2)R -> y <- array1 * array2Julia -> y = array1 .* array2複製代碼
Julia 的 Pkg 包管理器秒殺 Python 的 Pip 包管理器。Pkg 自帶 REPL 和 Julia 包,你能夠從中構建、添加、移除、實例化包。由於 Pkg 和 Git 是綁定的使得以上操做尤爲便利。更新、添加包都很是容易。總之,比起 Python 的 Pip,Pkg 的使用體驗在任什麼時候候都要愉悅得多。orm
R 也好,Julia 也好,Python 也好,你用什麼語言其實沒那麼重要。重要的是,你要知道每種語言都有它的劣勢,沒有哪一種語言是無可挑剔的。特別是當你的程序用途普遍時尤其明顯(從機器學習到 GUI 到 API)。綜上所述,Julia 和 Python 同樣是我很喜歡的語言之一。Python 有更好的包,若是項目足夠小,我就會用 Python。可是對於擁有數百萬個觀察結果的數據集,用 Python 讀取數據都會變成一件難事。
總之,我對 Julia 的將來滿懷期待。Julia 寫起來頗有趣,並且在將來的數據科學領域可能會變得更加實用。