在Matlab和Python中,哪种语言适合进行统计分析?


17

在Matlab和Python中,哪种语言最适合常规统计数据分析?除了可访问性之外,每种方法都有哪些优缺点?


2
这应该是社区Wiki,IMO。
Shane 2010年

您是否愿意解释为什么您也不能同时查看R?
Dirk Eddelbuettel

@DirK:我几乎没有听说过R。此外,我想学习一些编程语言,例如Python,然后再说一次,我也不认为R与python,IMO相似。我希望它能回答您的问题。

2
在这里以及在StackOverflow上,就人们对统计分析和编程的建议提出一些建议。我们中的许多人认为R并没有真正的替代品。但是就像美一样,这在情人眼中如此幸运。
Dirk Eddelbuettel

就地统计学而言(我曾攻读博士学位),我认为R装备精良(请参阅gstat,geoR等)。至少我不了解python中的地统计技术的完整介绍。为什么R“离Python不远”?我既使用过地理定位器,又使用过几何稳压器,我认为R明显优越。
Paul Hiemstra

Answers:


29

作为过去10多年的Matlab忠实用户,我建议您学习Python。一旦您掌握了某种语言的技能,当您在学习某种语言时,就好像您的生产力不够高,您将退而求用默认的最佳语言。至少,我建议您尝试精通多种语言(我也建议使用R)。

我喜欢Matlab:

  • 我精通它。
  • 它是数值分析人员中的通用语言
  • 分析工具非常好。这是我使用Matlab而不是八度的唯一原因。
  • 有一个免费软件的副本octave,它与参考实现完全兼容。

我不喜欢Matlab的地方:

  • 没有一个好的系统来管理第三方(免费或其他)软件包和脚本。Mathworks控制着“中央文件交换”,并且附加软件包的安装似乎很笨拙,与R拥有的出色系统完全不同。而且,Mathworks没有动力来改善这种情况,因为它们通过销售与免费软件包竞争的工具箱赚钱。
  • Matlab中的并行计算许可证非常昂贵。
  • 许多m代码(包括许多工具箱功能和一些内置函数)被设计为显然正确的,但以效率和/或可用性为代价。最明显的例子是Matlab median函数,该函数执行某种数据,然后取中间值。自70年代以来,这一直是错误的算法。
  • 在Matlab中,将图形保存到文件最多是狡猾的。
  • 尽管Mathworks继续增加麻烦,但我发现过去5年(我开始使用Matlab而不是八度音程)时,我的用户体验没有改善。这表明我不是他们的目标客户,而是他们希望通过使电力用户的状况变得更糟来扩大市场份额。
  • 现在有两种方法可以在Matlab中进行面向对象的编程,这充其量是令人困惑的。使用旧样式的旧版代码将保留一段时间。
  • Matlab UI用Java编写,它对内存管理有不愉快的想法。

+1,好点。关于这一点:“关于内存管理的令人讨厌的想法” ..有趣的是,您能详细说明一下吗?
ars

1
我的记忆正在某个地方 ; 我在Matlab之外使用Java的经验表明,这可能是罪魁祸首,并且在其中运行-nojvm似乎对您有帮助...
shabbychef 2010年

我最喜欢的MATLAB奇怪的内置代码示例是shuffle,它通过对新创建的随机向量进行排序,以返回的顺序对数据进行重新排序。

1
@mbq:shuffle可能在工具箱中,而不是Matlab。几乎不比内置函数差,randperm后者返回随机向量的排序索引。同样,这可能是错误的算法(我刚刚在stats.SE上了解到Knuth-Fisher-Yates洗牌)..
shabbychef 2010年

1
@mbq:另一个好处randperm是它受的播种的影响randn,而混合版本的Knuth-Fisher-Yates可能无法“内部”访问randn种子,而纯.m版本的shuffle可能会太慢了。
shabbychef

11

让我们将其分为三个区域(在我的脑海中):编程遇到统计数据:数据处理,数值例程(优化等)和统计库(建模等)。

首先,最大的不同是Python是通用编程语言。只要您的世界与fortran数值数组大致同构,Matlab就是伟大的。一旦开始处理数据处理和相关问题,Python就会超越Matlab。例如,请参阅Greg Wilson的书:数据处理:使用Java,Python等解决日常问题

在第二个方面,Matlab确实在数值运算方面大放异彩。很多研究机构都使用它,如果你正在寻找的发言权,与在压缩感知纸一些算法,你是更容易找到在Matlab中的实现。另一方面,Matlab就像是科学计算的PHP一样,它努力为阳光下的所有事物提供功能。如果您是编程语言的极客,那么最终的美学和体系结构将令人发疯,但是从功利主义的角度来说,它可以完成工作。随着Numpy / Scipy的兴起,其中许多变得不那么相关了,您很可能会找到适用于Python的优化和机器学习库。无论哪种语言,与C的接口都一样容易。

关于用于建模等方面的统计库的可用性,与R之类的东西相比,两者都有些缺乏。(尽管我怀疑两者都可以满足80%从事统计工作的人员的需求。)对于Python方面,请参见此问题。 :Python作为统计工作台。在Matlab方面,我知道有一个统计工具箱,但是我会让更多的知识渊博的人填补空白(我在Matlab上的经验仅限于与统计无关的数值工作)。


Matlab中的统计工具箱非常有趣。R是否有类似的东西,例如您可以在其中快速尝试一系列不同的函数拟合(回归)?
Alex R.

6

我也是Matlab的狂热用户已有10多年了。在这些年中的许多年里,我没有理由超出为工作创建的工具箱的范围。尽管为工具箱创建了许多功能,但我经常需要创建用于快速周转分析的算法。由于这些算法经常利用矩阵数学,因此Matlab是我工作的理想人选。除了我的Matlab代码工具箱外,由于语言之间的互操作性很明显,因此我小组中的其他人也广泛使用Java。多年来,我对Matlab感到完全满意,但是大约3年前,我决定开始从Matlab缓慢过渡,并高兴地说我大约一年后才开始使用它。这是我搬家的原因:

  • 我使用在线和离线计算系统时,许可系统总是让人头疼。似乎总是发生这样的情况,当我们最需要Matlab时,许可证会过期或突然出现问题。这总是令人头疼。另外,如果我们曾经需要共享代码,而另一方也没有相同工具箱的许可证,那么这会令人头疼。 不是免费的
  • 我经常需要创建演示文稿。尽管Matlab提供了广泛的工具来创建图形,这使其在算法设计中非常强大,但是保存图形以使其可以插入演示文稿中看起来很漂亮并不是一件容易的事。我经常不得不将EPS文件插入Adobe illustrator中,以清除所有垃圾,修复字体并清理行。但是,有一些工具可以帮助您进行文件交换(export_fig.m)。
  • 我经常从别人那里得到Matlab代码。发生这种情况时,我几乎总是重写它,因为:他们的API与我的数据不兼容,他们的代码没有意义,很慢,没有输出我需要的东西,...基本上,用Matlab开发的人都是不是软件工程师,Matlab不鼓励任何类型的设计原则。
  • 我是超级用户。我喜欢码头。我讨厌GUI-讨厌它。当他们添加“ windows”样式的功能区时,我讨厌它。基本上,他们对GUI的调整和糟糕的内存管理推动了我的最后一个按钮,我决定离开。-nodesktop大多数情况下,使用该选项是不错的选择,但这是有问题的。
  • 设计功能的可能性很多(使用OO或功能设计),但没有一种感觉是正确的,大多数是自觉的。我在Matlab中设计好的功能并没有获得满意的结果
  • 社区很大,但共享和查找好的代码并不容易。文件交换不是很好。

这只是我对Matlab的众多了解中的几个。这是一个闪耀的属性:快速,轻松地编写代码(如果不难看的话)非常容易。我确实离开了它,而我的追求使我经历了Clojure-> JavaScript-> Python <-> Julia;是的,我到处都是。

  • Clojure:漂亮的功能语言。我使用Clojure的原因是它能够编写Java脚本。我们的许多“大型”代码库都是使用Java编写的,因此这很有意义。当时,很多科学处理技术还不容易获得,而且可视化技术也没有很多。但是我认为这正在改变。
  • Javascript:在http://julialang.org/上看到了基准测试之后,并且由于我对D3的可视化功能非常感兴趣,因此决定尝试JavaScript。JavaScript非常快。但是,如果您真的想讨厌自己,请学习JavaScript。
  • Python:Python拥有一个了不起的社区,并且正在进行许多伟大的项目。IPython Notebook之所以令人赞叹,原因有很多(其中一个原因是将图形简单复制/粘贴到PowerPoint中)。诸如NumPy / SciPy / Scikit-Learn / Pandas之类的项目确实使Python变得有趣且易于使用。在多个内核或集群上使用非常容易。我为切换感到非常高兴。
  • 朱莉娅:朱莉娅很棒。尤其适用于Matlab用户。虽然还处于起步阶段,但仍在进行许多更改。Python的主要缺点之一是它没有Matlab具有的所有内置功能。当然NumPy / SciPy带来了该功能,但是它不是内置的,因此您必须决定是纯python对象还是numpy对象。Julia基本上拥有您希望Python来自Matlab的所有内容。我会等待,但这是将来Matlab用户的最佳选择。
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.