为什么说Julia更优于PythonC

北京治皮肤科的好医院 http://pf.39.net/bdfyy/bdfjc/160306/4781492.html

两大机器学习和统计编程中的常用语言Julia和Python,究竟有何不同?

作者

EmmettBoudreau

译者

弯月,责编

屠敏

以下为译文:

Julia是一种多范式、以函数式为主的编程语言,主要用于机器学习和统计编程。Python是另一种用于机器学习的多范式编程语言,尽管人们通常认为Python是面向对象的编程语言。而Julia则主要是函数式。尽管Julia远不如Python流行,但在数据科学中使用Julia有很多优势,在许多情况下Julia甚至是比Python更好的选择。

速度

提起Julia就不得不谈论速度。Julia最自豪的地方就是速度快。与解释型语言Python不同,Julia是一种用自己的方式实现的编译语言。然而,与其他编译语言(如C)不同,Julia是在运行时进行编译的,而传统语言则是在执行之前进行编译的。Julia的速度有时甚至可能超越C(如果编写适当的话)。Julia使用即时编译器(JIT),编译速度非常快,尽管它的编译更像一种解释型语言,而非C或Fortran等传统的低级编译语言。

多用途

你可能已经注意到,我说过就多用途而言,Python比Julia更占优势。这是事实,很多Python可以做到的事情,而Julia却做不到。当然,这只是就语言本身而言的,因为我们现在讨论的多样性是语言的多功能性。而实际上,Julia代码可以在R、Latex、Python和C中执行。这意味着一般的数据科学项目理论上都可以仅编写一次,然后通过Julia,在其他语言的wrapper中原生地进行编译,或者也可以通过发送字符串的形式来编译。

PyCall和RCall也非常有用。考虑到Julia的弱点就在于其软件包,因此能够随时随地调用Python和R真的很方便。Julia中很好地实现了PyCall,并且做得非常好且非常实用。

多重分派

Julia是一种非常独特的有类型语言,有自己的特性,但最棒的特性就是多重分派功能。首先,也是最重要的一点,那就是Julia的多重分派非常快。除此之外,Julia的多态分派还可以将函数定义作为结构体的属性使用。当然,Julia中的继承就是用这个实现的。

不仅如此,Julia的多重分派还能让函数更具可扩展性。对于软件包扩展来说这一点非常有用,因为在需要明确地导入某个方法时,用户可以改变方法的名称。因此很容易明确地导入方法并进行扩展,方便构造体使用新的函数。

为机器学习量身打造

与Python不同,Julia是为统计学和机器学习量身打造的。Python诞生于于九十年代前期,是一个简单的面向对象语言,尽管后来发生了许多变化。考虑到Python的发展史以及各种各样的用途,Julia作为一项专为高层次统计学打造的语言有许多优势。

我认为其优势之一就是线性代数。原始的Python很难进行线性代数运算,但原始的Julia做线性代数非常方便。这是因为Python从来没有考虑过支持机器学习所需的矩阵和方程等。尽管这并不是Python的缺点,特别是在有了NumPy之后,但从不需要额外软件包的角度来看,Julia感觉更适合这类数学运算。Julia的操作符系统更类似于R,这也是非常大的优势。绝大多数线性代数操作都非常快且容易。下面是一个点乘的例子:

Python-y=np.dot(array1,array2)R-y-array1*array2Julia-y=array1.*array2

包管理器

也许我是第一个这样说的人:Julia的pkg包管理器远胜于Python的pip包管理器。你可以利用pkg自带REPL构建、添加、删除和初始化Julia包。pkg非常方便,因为它绑定了Git。更新也很容易,添加包非常容易,整体而言,Pkg比Pythonpip更方便。

总结

不论你选择R、Julia、Python还是Scala,这都不重要。重要的是你需要注意到每种语言都有缺点,并没有一种“完美的语言”。在进行多种编程活动时这一点尤为明显,比如你需要做机器学习,也需要做GUI、API等。尽管如此,Julia仍然是我最喜欢的语言之一,Python也是。Python的软件包更好,而且如果项目很小,我更倾向于使用Python,但对于拥有几百万观测点的数据集而言,Python读取数据都会有困难。

总体来说,我更看好Julia未来的发展趋势。使用Julia编程非常愉悦,这门语言很可能在数据科学中有更好的发展前景。

原文:


转载请注明:http://www.aierlanlan.com/rzgz/2442.html