天天看點

python julia_有人說Julia比Python好,還給出了5個理由

本文作者從速度、通用性、多重派發、适用于 ML 的程度和包管理器 5 個方面闡述了 Julia 語言相較于 Python 的優勢所在。

選自medium,作者:Emmett Boudreau,機器之心編譯,參與:杜偉、張倩、肖清。

Julia 是一種多範式的函數式程式設計語言,用于機器學習和統計程式設計。盡管 Python 通常被認為是一種面向對象的程式設計語言,其實它也是用于機器學習的多範式程式設計語言。需要注意的是,Julia 語言更多地基于函數範式。此外,Julia 語言雖不如 Python 那麼流行,但在資料科學中使用 Julia 具有很大的優勢,進而使它在很多情況下成為更好的程式設計語言選擇。

下文将從五個方面介紹 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,并選擇相應結構将它擴充為一個新的函數。

适用于 ML 的程度

與 Python 不同,Julia 語言的目的是應用于統計學和機器學習領域。Python 語言則建立于 20 世紀 90 年代早期,是一種面向對象的語言,并且自此之後也改變了很多。盡管 Python 具有很長的發展曆史以及廣泛的應用範圍,但使用一種專門建立用于進階統計工作的語言能夠帶來很大的好處。

我認為線上性代數中使用 Julia 要好于 Python。原生的 Python 隻能緩慢完成線性代數,而原生的 Julia 可以飛快地完成。這是因為,Python 最開始并不是開發來用于支援與機器學習相關的所有矩陣和方程運算的。這并不意味着 Python 不好,特别是當有了 NumPy 擴充庫之後。但就不導入額外擴充庫而言,Julia 更适合于這類數學運算。此外,與 Python 相比,Julia 的操作數系統與 R 語言的更為相近。使用 Julia 語言能夠更快速、更容易地完成大多數線性代數運算,如以下代碼所示:

Python -> y = np.dot(array1,array2)

R -> y <- array1 * array2

Julia -> y = array1 .* array2

包管理器

Julia 的 Pkg 包管理器秒殺 Python 的 Pip 包管理器。Pkg 自帶 REPL 和 Julia 包,你可以從中建構、添加、移除、執行個體化包。因為 Pkg 和 Git 是綁定的使得以上操作尤其便利。更新、添加包都非常容易。總之,比起 Python 的 Pip,Pkg 的使用體驗在任何時候都要愉悅得多。

總結

R 也好,Julia 也好,Python 也好,你用什麼語言其實沒那麼重要。重要的是,你要知道每種語言都有它的劣勢,沒有哪種語言是無可挑剔的。特别是當你的程式用途廣泛時尤為明顯(從機器學習到 GUI 到 API)。綜上所述,Julia 和 Python 一樣是我很喜歡的語言之一。Python 有更好的包,如果項目足夠小,我就會用 Python。但是對于擁有數百萬個觀察結果的資料集,用 Python 讀取資料都會變成一件難事。

總之,我對 Julia 的未來滿懷期待。Julia 寫起來很有趣,而且在未來的資料科學領域可能會變得更加實用。