Julia vs. Python:哪种编程语音最适合数据科学?

在Python涵盖的许多用例中,数据分析可能已经成为最大和最重要的。Python生态系统充满了库、工具和应用程序,这些库、工具和应用程序使科学计算和数据分析的工作又快又方便。

但是对于Julia语言背后的开发人员来说——专门针对“科学计算、机器学习、数据挖掘、大规模线性代数、分布式和并行计算”——python不够快,也不够方便。Python代表了一种权衡,对数据分析工作的某些部分来说是好事,但对其他部分来说则是坏事。

从TensorFlow机器学习开始。•查看最新版本的TensorFlow有什么新功能。|与InfoWorld的应用程序开发报告通讯保持编程热点话题。]

朱莉娅语是什么?

Julia于2009年由一个四人团队创建,并于2012年向公众开放,旨在解决Python和其他用于科学计算和数据处理的语言和应用程序的缺陷。“我们很贪婪,”他们写道。他们想要更多:

我们想要一种开源的语言,拥有自由的许可。我们想要C语言的速度和Ruby的活力。我们想要一种同形的语言,有真正的宏,如Lisp,但有明显的,熟悉的数学符号,如Matlab。我们想要一些像Python这样的通用编程工具,像R这样的统计工具,像Perl那样的字符串处理工具,像Matlab那样的线性代数工具,像shell那样善于把程序粘合在一起。这是非常简单的学习,但让最严重的黑客高兴。我们希望它是交互式的,我们希望它被编译。

(我们提到过它应该和C一样快吗?)

以下是茱莉亚实现这些愿望的一些方法:

Julia是编译的,而不是解释的。为了获得更快的运行时性能,Julia是使用LLVM编译器框架即时编译的。在最佳状态下,Julia可以接近或匹配C语言的速度。

茱莉亚是互动的。Julia包括一个REPL (read-eval-print循环)或交互式命令行,类似于Python所提供的。快速的一次性脚本和命令可以直接输入。

朱莉娅的语法很简单。Julia的语法类似于Python的简洁,但也有表现力和强大的功能。

Julia结合了动态类型和静态类型的优点。您可以为变量指定类型,比如“无符号32位整数”。但是,您也可以创建类型层次结构,以允许处理特定类型变量的一般情况—例如,编写一个函数来接受整数,而不指定整数的长度或签名。如果在特定上下文中不需要输入,甚至可以完全不输入。

Julia可以调用Python、C和Fortran库。Julia可以直接与用C语言和Fortran编写的外部库进行接口。还可以通过PyCall库与Python代码进行接口,甚至可以在Python和Julia之间共享数据。

茱莉亚元编程支持。Julia程序可以生成其他Julia程序,甚至修改它们自己的代码,这让人想起Lisp之类的语言。

Julia有一个功能齐全的调试器。Julia 1.1引入了一个调试套件,它在本地REPL中执行代码,允许您逐步检查结果、检查变量并在代码中添加断点。您甚至可以执行细粒度的任务,比如单步执行由代码生成的函数。

Julia vs. Python: Julia语言的优势

Julia从一开始就是为科学和数值计算而设计的。因此,Julia有许多对这类用例有利的特性就不足为奇了:

茱莉亚快。Julia的JIT编译和类型声明意味着它通常可以打败“纯的”、未经优化的Python。通过外部库、第三方JIT编译器(PyPy)和Cython等工具的优化,可以使Python更快,但是Julia的设计就是为了更快。

Julia有一个数学友好的语法。Julia的主要目标用户是科学计算语言和环境的用户,如Matlab、R、Mathematica和Octave。Julia的数学运算语法看起来更像是在计算世界之外编写数学公式的方式,这使得非程序员更容易理解。

茱莉亚有自动内存管理。与Python一样,Julia也没有为用户提供分配和释放内存的细节,而且它还提供了一些手动控制垃圾收集的措施。其思想是,如果您切换到Julia,就不会失去Python的一个常见便利。

朱莉娅提供了优越的并行性。当您能够充分利用给定机器上可用的全部资源,特别是多核资源时,数学和科学计算就会蓬勃发展。Python和Julia都可以并行运行操作。然而,Python用于并行化操作的方法通常需要在线程或节点之间序列化和反序列化数据,而Julia的并行化更精细。此外,Julia的并行化语法没有Python的那么重,降低了使用它的门槛。

Julia vs. Python: Python的优势

虽然Julia是专门为数据科学而构建的,而Python或多或少已经发展成这个角色,但是Python为数据科学家提供了一些引人注目的优势。对于数据科学工作来说,“通用”Python可能是更好的选择,原因如下:

Julia数组是1索引的。这可能看起来是一个模糊的问题,但它可能是一个不和谐的问题。在大多数语言中,包括Python和C,数组的第一个元素是用0来访问的,例如。在Python中,字符串[0]表示字符串中的第一个字符。Julia对数组中的第一个元素使用1。这不是一个武断的决定;许多其他的数学和科学应用程序,比如Mathematica,都使用1索引,而Julia的目的就是吸引那些读者。在Julia中使用实验性特性支持零索引是可能的,但是默认情况下使用1索引可能会阻碍具有根深蒂固编程习惯的更通用用户的采用。

Python是成熟。茱莉亚语还很年轻。Julia从2009年才开始开发,并且在开发过程中经历了大量的特性转换。相比之下,Python已经存在了近30年。

Python有更多的第三方包。Python第三方包文化的广泛性和实用性仍然是该语言最大的吸引力之一。同样,Julia的相对新颖意味着围绕它的软件文化仍然很小。其中一些被使用现有C和Python库的能力所抵消,但是Julia需要自己的库来繁荣。

Python有数百万用户。一门语言如果没有一个庞大的、投入的、活跃的社区围绕着它,那它就什么都不是。Julia周围的社区热情高涨,而且还在不断增长,但它的规模仍然只是Python社区的一小部分。Python庞大的社区是一个巨大的优势。

Python正在变得越来越快。除了获得对Python解释器的改进(包括对多核和并行处理的改进)之外,Python还变得更容易加速。mypyc项目将带类型注释的Python转换为原生C语言,比Cython简单得多。它通常会带来四倍的性能改进,而且对于纯数学操作通常会有更多的改进。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();