有人說Julia比Python好,還給出了5個理由
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 寫起來很有趣,而且在未來的數據科學領域可能會變得更加實用。
【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】