有人说Julia比Python好,还给出了5个理由

2020 年 3 月 22 日 机器之心
选自medium

作者: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 写起来很有趣,而且在未来的数据科学领域可能会变得更加实用。



文为机器之心编译,转载请联系本公众号获得授权
✄------------------------------------------------
加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com
投稿或寻求报道:content @jiqizhixin.com
广告 & 商务合作:bd@jiqizhixin.com
登录查看更多
1

相关内容

Python是一种面向对象的解释型计算机程序设计语言,在设计中注重代码的可读性,同时也是一种功能强大的通用型语言。
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【实用书】Python数据科学从零开始,330页pdf
专知会员服务
141+阅读 · 2020年5月19日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
【电子书推荐】Data Science with Python and Dask
专知会员服务
43+阅读 · 2019年6月1日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Julia 对决Python:谁能在2019年称霸机器学习编程?
七月在线实验室
3+阅读 · 2019年1月13日
开发 | 用 Python 做机器学习不得不收藏的重要库
AI科技评论
5+阅读 · 2019年1月8日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
快乐的迁移到 Python3
Python程序员
5+阅读 · 2018年3月25日
A Survey on Deep Learning for Named Entity Recognition
Arxiv
26+阅读 · 2020年3月13日
Adaptive Neural Trees
Arxiv
4+阅读 · 2018年12月10日
Arxiv
7+阅读 · 2018年5月23日
VIP会员
相关VIP内容
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【实用书】Python数据科学从零开始,330页pdf
专知会员服务
141+阅读 · 2020年5月19日
算法与数据结构Python,369页pdf
专知会员服务
161+阅读 · 2020年3月4日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
【电子书推荐】Data Science with Python and Dask
专知会员服务
43+阅读 · 2019年6月1日
相关资讯
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Julia 对决Python:谁能在2019年称霸机器学习编程?
七月在线实验室
3+阅读 · 2019年1月13日
开发 | 用 Python 做机器学习不得不收藏的重要库
AI科技评论
5+阅读 · 2019年1月8日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
快乐的迁移到 Python3
Python程序员
5+阅读 · 2018年3月25日
Top
微信扫码咨询专知VIP会员