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

机器算法验证 matlab Python
2022-02-13 13:24:04

在 Matlab 和 Python 中,哪种语言适合一般的统计数据分析?除了可访问性之外,每种方法的优点和缺点是什么?

3个回答

作为过去 10 多年的顽固 Matlab 用户,我建议您学习 Python。一旦你对一种语言足够熟练,当你使用一种正在学习的语言工作时,你会觉得你的工作效率不够高,你会退回到使用默认的最佳语言。至少,我建议您尝试同样精通多种语言(我也建议使用 R)。

我喜欢 Matlab 的地方:

  • 我精通它。
  • 它是数字分析师的通用语言。
  • 分析工具非常好。这是我使用 Matlab 而不是 octave 的唯一原因。
  • 有一个免费软件克隆,octave,它与参考实现有很好的一致性。

我不喜欢 Matlab 的地方:

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

让我们把它分解成三个领域(在我的脑海中),编程遇到统计:数据处理、数值例程(优化等)和统计库(建模等)。

首先,最大的区别在于 Python 是一种通用编程语言。只要您的世界与 fortran 数值数组大致同构,Matlab 就很棒。一旦你开始处理数据处理和相关问题,Python 就会胜过 Matlab。例如,请参阅 Greg Wilson 的书:数据处理:使用 Java、Python 等解决日常问题

其次,Matlab 确实在数值工作方面大放异彩。许多研究社区都在使用它,如果您正在寻找与压缩感知论文相关的算法,您更有可能Matlab 中找到实现。另一方面,Matlab 是一种科学计算的 PHP —— 它努力为阳光下的一切提供功能。如果您是编程语言极客,那么由此产生的美学和架构令人抓狂,但从实用的角度来看,它可以完成工作。随着 Numpy/Scipy 的兴起,其中很多已经变得不那么相关了,您同样可能会找到可用于 Python 的优化和机器学习库。在任何一种语言中,与 C 的交互都非常简单。

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

我也是一个狂热的 Matlab 用户 10 多年了。在那些年的许多年里,我没有理由在我为工作创建的工具箱之外工作。尽管为工具箱创建了许多函数,但我经常需要创建算法以进行快速周转分析。由于这些算法经常使用矩阵数学,Matlab 是我工作的理想人选。除了我的 Matlab 代码工具箱之外,我小组中的其他人也广泛使用 Java,因为这两种语言之间存在明显的互操作性。多年来,我对 Matlab 非常满意,但大约 3 年前,我决定开始从 Matlab 缓慢过渡,并且很高兴地说我已经有大约一年没有打开它了。以下是我搬家的原因:

  • 我使用在线和离线计算系统,许可系统总是令人头疼。当我们最需要 Matlab 时,似乎总是会发生许可证过期或突然出现问题的情况。这一直是一件令人头疼的事情。此外,如果我们需要共享代码,而另一方没有相同工具箱的许可证,这会让人头疼。 它不是免费的
  • 我经常需要创建演示文稿。尽管 Matlab 为创建图形提供了广泛的工具,这使得它在算法设计方面非常强大,但是保存图形以便可以插入到演示文稿中看起来不错并不是一件简单的任务。我经常不得不在 Adob​​e illustrator 中插入 EPS 文件来删除所有垃圾、修复字体和清理线条。不过,有一些工具可以帮助解决文件交换问题(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 用户的最佳选择。