最佳科学计算语言[关闭]


10

似乎大多数语言都具有一定数量的科学计算库。

  • Python有 Scipy
  • RustSciRust
  • C++有几个包括ViennaCLArmadillo
  • Java具有Java NumericsColt其他几个

且不说像语言RJulia明确的科学计算而设计。

有这么多种选择,您如何选择适合任务的最佳语言?另外,哪种语言的性能最高?Python并且R似乎在该领域具有最大的吸引力,但从逻辑上讲,编译语言似乎是一个更好的选择。会有什么表现胜过Fortran?此外编译语言往往有GPU加速,而解释性语言如RPython没有。选择一种语言时应该考虑什么?哪些语言可以在效用和性能之间取得最佳平衡?还有我错过的具有重要科学计算资源的语言吗?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
毫无疑问。如果您需要进行编程语言的基础研究,那么最好是阅读Wikipedia,而不是等待有人弹出来推动他的业余爱好。
Dirk Eddelbuettel 2014年

@DirkEddelbuettel很好。认为在Beta版本中尝试制作内容比完善内容要好,但我对SE beta版本了解不多。这对我来说是个好举动吗?
印度2014年

1
这些数字。
Emre 2014年

@DirkEddelbuettel您没看错,但是我的希望是促进与各种语言相关的有用特性和工具的讨论。您使用的语言是数据科学中的重要工具,因此我的想法是人们可以讨论他们喜欢的工具,并从中获得客观的好处,作为寻求类似工作的人员的资源。
ragingSloth 2014年

1
@indico尝试cran.r-project.org/web/packages/overlap/index.html,这只是我偶然随机选择的第一个。但实际上,我个人认识许多写过R包的统计学家。他们中没有一个还编写了python。为了扩大对话范围,kdnuggets.com / 2013/08 /…很有趣。
Lembik 2014年

Answers:


12

这是一个相当大的问题,因此,这并不是一个完整的答案,但希望这可以帮助您为数据科学领域的通用实践提供信息,以帮助确定最佳工作工具。通常,涉及该领域的任何工具时,我都会寻找相对较短的资格证书。按以下顺序,它们是:

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

有大量关于性能和可伸缩性的文章,但是一般来说,您会发现语言之间的性能差异可能是5到10倍,这取决于您的特定应用可能无关紧要。就GPU加速而言,这cudamat是使其与一起工作的一种非常无缝的方式python,并且该cuda库通常使GPU加速的访问性比以前高得多。

我用于社区和灵活性的两个主要指标是查看语言的程序包管理器以及诸如SO之类的网站上的语言问题。如果存在大量高质量的问题和答案,则表明社区很活跃。软件包数量以及这些软件包的一般活动也可以很好地代表此指标。

就易用性而言,我坚信真正了解的唯一方法是自行进行设置。围绕许多数据科学工具有很多迷信,特别是诸如数据库和分布式计算体系结构之类的东西,但是没有办法真正知道是否容易或难以简单地建立和部署某些东西而不仅仅是自己构建它。


要添加到这样的回答:在可扩展性方面,Scala并且Go值得一提。
马克·克莱森

我要增加清晰和简洁(与语法和语言体系结构有关,但不仅如此)。能够快速书写和阅读而不会费劲,这带来了巨大的改变(因为程序员的时间比机器的时间更昂贵)。
Piotr Migdal

5

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

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

我知道我的大多数观点都支持既定语言。这是从“事情搞定”的角度来看的。

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

  • 低级:C ++,C,Fortran,... 仅在需要时才可以使用某些概要分析热点因为使用这些语言进行开发通常较慢(尽管这尚有争议)。这些语言在关键性能方面仍然是首屈一指,并且很可能会长期保持领先地位。
  • 高级:Python,R,Clojure,...可以将某些东西“胶合”在一起,并进行非性能关键的东西(预处理,数据处理等)。我发现这很重要,只是因为使用这些语言进行快速开发和原型制作要容易得多。

4

首先,您需要确定要执行的操作,然后为该任务寻找合适的工具。

一种非常通用的方法是将R用于第一个版本,并查看您的方法是否正确。它缺乏速度,但是具有非常强大的命令和附加程序库,您几乎可以尝试使用它的任何方法:http : //www.r-project.org/

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

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

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

如果您有工作版本,则将其移植到您认为性能更高的任何其他语言几乎是容易的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.