作者:Emmett Boudreau
机器之心编译
参与:杜伟、张倩、肖清
本文作者从速度、通用性、多重派发、适用于 ML 的程度和包管理器 5 个方面阐述了 Julia 语言相较于 Python 的优势所在。
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 写起来很有趣,而且在未来的数据科学领域可能会变得更加实用。