朱莉娅:评估它的表现

机器算法验证 r Python 计算统计 朱莉娅
2022-02-16 06:09:16

我遇到了一个 2012 年的问题,该问题对 Julia 作为各种类型的统计工作的 R / Python 的替代品进行了很好的讨论。

这是 2012 年关于 Julia 承诺的原始问题

不幸的是,当时 Julia 还很新,统计工作所需的工具包有些原始。错误正在被消除。发行版很难安装。等等。

有人对这个问题发表了非常贴切的评论:

这就是说,事后看来,这个问题可能需要 5 年的时间才能得到回答。截至目前,Julia 缺乏可以与 R 竞争日常用户的统计编程系统的以下关键方面:

那是在 2012 年。现在已经是 2015 年,三年过去了,我想知道人们认为 Julia 的表现如何?

语言本身和整个 Julia 生态系统是否有更丰富的经验?我愿意知道。

具体来说:

  1. 你会建议任何统计工具的新用户学习 Julia 而不是 R 吗?
  2. 你会建议人们在什么样的统计用例中使用 Julia?
  3. 如果 R 在某项任务上运行缓慢,那么切换到 Julia 或 Python 是否有意义?

注意:首次发布于 2015 年 6 月 14 日。

3个回答

我已切换到 Julia,以下是我的务实原因:

  • 它确实很好地粘合代码。我在 MATLAB 中有很多遗留代码,而MATLAB.jl安装了 5 分钟,运行良好,并且语法简洁,可以很自然地使用 MATLAB 函数。Julia 对于 R、Python、C、Fortran 和许多其他语言也有相同的功能。
  • Julia 的并行性非常好。我说的不仅仅是多处理器(共享内存)并行,还有多节点并行。我可以访问不经常使用的 HPC 节点,因为每个节点都很慢,所以我决定试试 Julia。我将@parallel 添加到一个循环中,通过告诉它机器文件来启动它,然后它使用了所有5个节点。尝试在 R/Python 中这样做。在 MPI 中,它需要一段时间才能工作(这就是知道你在做什么),而不是你第一次尝试的几分钟!
  • Julia 的向量化速度很快(在许多情况下比任何其他高级语言都快),并且它的去向量化代码几乎是 C 语言的速度。所以如果你写科学算法,通常你先用 MATLAB 写,然后用 C 重写。Julia 让你写一次,然后给它编译器代码,5 分钟后它很快。即使您不这样做,这也意味着您只需以任何感觉自然的方式编写代码,它就会运行良好。在 R/Python 中,有时您必须非常努力地思考才能获得一个好的矢量化版本(以后可能很难理解)。
  • 元编程很棒。想想你有多少次说“我希望我能用这种语言______”。为它写一个宏。通常有人已经有了。
  • 一切都在 Github 上。源代码。包裹。超级容易阅读代码,向开发人员报告问题,与他们交谈以了解如何做某事,甚至自己改进包。
  • 他们有一些非常好的图书馆。对于统计数据,您可能会对它们的优化包感兴趣(JuliaOpt 是一个管理它们的组)。数字包已经是一流的,而且只会有所改进。

也就是说,我仍然非常喜欢 Rstudio,但 Atom 上的新 Juno 非常好。当它不再处于繁重的开发中并且稳定时,我认为它比 Rstudio 更好,因为插件很容易(例如:它有一个很好的插件可以适应 hidpi 屏幕)。所以我认为 Julia 现在是一门很好的学习语言。到目前为止,它对我来说效果很好。YMMV。

我认为“在 Y 上学习 X”不是提出问题的正确方法。事实上,您可以学习(至少是基础知识)两者,并根据手头的具体任务决定合适的工具。而且由于 Julia 继承了其他语言的大部分语法和概念,因此应该很容易掌握它(以及 Python,尽管我不确定 R 是否也是如此)。

那么哪种语言更适合什么任务呢?根据我使用这些工具的经验,我对它们的评价如下:

  • 对于可以使用 REPL 和几个脚本完成的纯统计研究, R似乎是完美的选择。它专为统计而设计,具有最长的工具历史,可能是最大的统计库集。

  • 如果您想统计数据(或机器学习)集成到生产系统中,Python似乎是更好的选择:作为一种通用编程语言,它有一个很棒的 Web 堆栈,绑定到大多数 API 和库,从废弃网页创建 3D 游戏

  • 用Julia编写高性能算法要容易得多如果您只需要使用或组合现有的库,例如由 C/C++ 支持的SciKit Learne1071,那么 Python 和 R 就可以了。但是当涉及到快速后端本身时,Julia 会真正节省时间:它比Python 或 R,不需要额外的 C/C++ 知识。例如,Mocha.jl在纯 Julia 深度学习框架Caffe中重新实现,该框架最初是用 C++ 编写的,并带有 Python 的包装器。

  • 也不要忘记某些库仅以某些语言提供。例如,只有 Python 具有成熟的计算机视觉生态系统,一些形状匹配和转换算法仅在 Julia 中实现,我听说过一些独特的 R 医学统计软件包。

(b) 你会建议人们在什么样的统计用例中使用 Julia

(c) 如果 R 在某项任务上运行缓慢,那么切换到 Julia 或 Python 是否有意义?

高维和计算密集型问题。

  • 多处理。Julia 的单节点并行功能 ( @spawnat) 比 python 中的要方便得多。例如,在 python 中,您不能在 REPL 上使用 map reduce 多处理池,并且您希望并行化的每个函数都需要大量样板文件。

  • 集群计算。Julia 的ClusterManagers软件包让您几乎可以像使用具有多个内核的单台机器一样使用计算集群。[我一直在尝试让这感觉更像是在ClusterUtils中编写脚本]

  • 共享内存。Julia 的SharedArray对象优于 python 中等效的共享内存对象。

  • 速度。我的 Julia 实现(单机)在随机数生成和线性代数(支持多线程 BLAS)方面比我的 R 实现快。

  • 互操作性。Julia 的PyCall模块让您无需包装即可访问 python 生态系统 - 例如,我将它用于pylab. R 有类似的东西,但我没有尝试过。还有ccall用于 C/Fortran 库的。

  • 显卡。Julia 的 CUDA 包装器python 中的包装器要发达得多(当我检查时,Rs 几乎不存在)。我怀疑这种情况将继续存在,因为在 Julia 中调用外部库比在 python 中容易得多。

  • 生态系统。Pkg模块使用 github 作为后端。我相信这将对 Julia 模块的长期可维护性产生重大影响,因为它使提供补丁或让所有者转嫁责任变得更加直接。

  • σ是一个有效的变量名;)

为大型问题编写快速代码将越来越依赖于并行计算。Python 本质上是不友好的并行 (GIL),而 R 中的本机多处理是不存在的 AFAIK。Julia 不需要您直接使用 C 来编写高性能代码,同时保留了 python/R/Matlab 的大部分感觉。

来自 python/R 的 Julia 的主要缺点是缺乏核心功能之外的文档。python 非常成熟,在文档中找不到的通常在stackoverflow 上。相比之下,R 的文档系统相当不错。

(a) 你会建议任何统计工具的新用户学习 Julia 而不是 R 吗?

是的,如果您符合 (b) 部分中的用例。如果您的用例涉及大量异构工作