科学计算的最佳语言

数据挖掘 效率 统计数据 工具 知识库
2021-10-09 04:50:22

似乎大多数语言都有一些可用的科学计算库。

  • Python有Scipy
  • Rust拥有SciRust
  • C++有几个包括ViennaCLArmadillo
  • JavaJava NumericsColt其他几个

更不用说专门为科学计算设计的语言RJulia

有这么多选项,您如何为任务选择最佳语言?此外,哪些语言的性能最高?Python并且R似乎在该领域具有最大的吸引力,但从逻辑上讲,编译语言似乎是一个更好的选择。任何东西都会表现出色Fortran吗?此外,编译语言往往具有 GPU 加速,而解释语言则喜欢RPython不喜欢。选择语言时我应该考虑什么,哪些语言可以提供实用性和性能的最佳平衡?还有我错过的任何具有重要科学计算资源的语言吗?

3个回答

这是一个相当大的问题,所以这并不是一个完整的答案,但希望这可以帮助指导一般实践,以确定在数据科学方面的工作的最佳工具。一般来说,当涉及到这个领域的任何工具时,我有一个相对较短的资格列表。它们没有特别的顺序是:

  • 性能:基本上归结为语言执行矩阵乘法的速度,因为这或多或少是数据科学中最重要的任务。
  • 可扩展性:至少对我个人而言,这归结为易于构建分布式系统。这是语言Julia真正闪耀的地方。
  • 社区:对于任何语言,您都在寻找一个活跃的社区,当您在使用您使用的任何工具时遇到困难时可以为您提供帮助。这是python远远领先于大多数其他语言的地方。
  • 灵活性:没有什么比受到您使用的语言的限制更糟糕的了。这种情况并不经常发生,但是尝试用其中表示图结构haskell是一种臭名昭著的痛苦,并且Julia由于语言如此年轻而充满了许多代码架构的痛苦。
  • 易用性:如果您想在更大的环境中使用某些东西,您需要确保设置简单并且可以自动化。没有什么比不得不在六台机器上建立一个 finnicky 构建更糟糕的了。

有大量关于性能和可扩展性的文章,但总的来说,您将看到语言之间的性能差异可能为 5-10 倍,这可能取决于您的特定应用程序,也可能无关紧要。就 GPU 加速而言,cudamat它是一种真正无缝的使用方式python,并且该cuda库总体上使 GPU 加速比以前更易于访问。

我用于社区和灵活性的两个主要指标是查看语言的包管理器,以及像 SO 这样的网站上的语言问题。如果有大量高质量的问题和答案,这是社区活跃的一个好兆头。包裹的数量和这些包裹上的一般活动也可以很好地代表这个指标。

就易用性而言,我坚信,真正了解的唯一方法是自己实际设置。很多数据科学工具都有很多迷信,特别是数据库和分布式计算架构之类的东西,但是如果不自己构建它,就无法真正知道设置和部署是容易还是难。

最好的语言取决于你想做什么。第一句话:不要将自己局限于一种语言。学习一门新语言总是一件好事,但在某些时候你需要做出选择。语言本身提供的功能很明显需要考虑,但我认为以下几点更重要:

  • 可用的库:你必须从头开始实现所有东西还是可以重用现有的东西?请注意,这些库不必使用您正在考虑的任何语言,只要您可以轻松地进行交互即可。使用没有库访问权限的语言不会帮助您完成工作。
  • 专家数量:如果您想要外部开发人员或开始在团队中工作,您必须考虑有多少人真正了解该语言。举个极端的例子:如果你决定在 Brainfuck 工作是因为你碰巧喜欢它,要知道你很可能会独自工作。许多调查可以帮助评估语言的受欢迎程度,包括每种语言关于 SO 的问题数量。
  • 工具链:您是否可以使用良好的调试器、分析器、文档工具和(如果您喜欢)IDE?

我知道我的大部分观点都支持成熟的语言。这是从“完成任务”的角度来看的。

也就是说,我个人认为精通低级语言和高级语言要好得多:

  • 低级:C++、C、Fortran ......只有在需要时才能使用它们来实现某些分析热点,因为使用这些语言进行开发通常较慢(尽管这有待商榷)。就关键性能而言,这些语言仍然是山中之王,并且很可能在很长一段时间内保持领先地位。
  • 高级别的:Python、R、Clojure ……将东西“粘合”在一起,做非性能关键的东西(预处理、数据处理……)。我发现这很重要,因为用这些语言进行快速开发和原型设计要容易得多。

首先,您需要决定要做什么,然后为该任务寻找合适的工具。

一种非常通用的方法是将 R 用于第一个版本并查看您的方法是否正确。它的速度有点慢,但有非常强大的命令和插件库,你几乎可以用它尝试任何东西: http ://www.r-project.org/

第二个想法是,如果您想了解库背后的算法,您可能想看看 Numerical Recipies。它们可用于不同的语言,并可免费用于学习。如果您想在商业产品中使用它们,您需要获得许可: http ://en.wikipedia.org/wiki/Numerical_Recipes

大多数情况下,性能不是问题,而是为它们找到正确的算法和参数,因此拥有一种快速的脚本语言而不是一个怪物程序很重要,该程序首先需要编译 10 分钟才能计算两个数字并输出结果。

使用 R 的一大优点是它具有内置函数或库,可用于您可能需要可视化数据的几乎任何类型的图表。

如果您有一个工作版本,则几乎可以轻松地将其移植到您认为性能更高的任何其他语言。