53

我最近被要求为一堂课学习一些 MATLAB 基础知识。

是什么让研究人员和在大学工作的人如此酷?我看到使用矩阵和绘制东西很酷......(可以使用一些库在 Python 中轻松完成的事情)。

编写函数或解析文件只是痛苦的。我还处于起步阶段,我错过了什么?

在“真实”世界中,我应该认为将它用于什么?什么时候能比 Python 做得更好?为了更好,我的意思是:写一些表演的简单方法。


更新 1:我最想知道的一件事是“我错过了什么吗?” :D

更新2:感谢您的回答。我的问题不是关于购买或不购买 MATLAB。大学可以免费给我一份旧版本的 MATLAB(我猜是 MATLAB 5)的副本,而不会破坏许可证。我对它的功能很感兴趣,如果它值得更深入的研究(我只需要基本的 MATLAB 就可以通过考试:P)对于特定类型的任务来说,它确实比 Python 更好世界。

4

21 回答 21

77

亚当只是部分正确。许多(如果不是大多数)数学家永远不会碰它。如果要使用计算机工具,那将是MathematicaMaple之类的东西。另一方面,工程部门经常依赖它,而且对于一些应用数学家来说肯定有一些有用的东西。它还在某些领域的工业中大量使用。

关于 MATLAB,您必须了解的是,它最初是作为Fortran线性代数库的包装器。长期以来,它有一种态度,即“整个世界都是一堆双打(花车)”。作为一门语言,它已经非常有机地成长,如果你把它看作一门编程语言的话,它有一些非常明显的缺陷。

但是,如果您将其视为进行某些类型研究的环境,它具有一些真正的优势。它与做浮点线性代数一样好。该符号简单而强大,实现快速且值得信赖。它非常擅长生成情节和其他交互式任务。有大量的“工具箱”为特定任务提供了很好的代码,而且价格实惠。有一个庞大的用户社区共享数字代码(Python + NumPy在同一个联盟中没有任何东西,至少目前如此)

Python,疣和所有,是一种更好的编程语言(和许多其他语言一样)。然而,就工具而言,它落后了十年左右。

关键是大多数使用 MATLAB 的人并不是真正的程序员,也不想成为。

对于通用编程语言来说,这是一个糟糕的选择;它很古怪,对于许多任务来说很慢(你需要对事物进行矢量化以获得高效的代码),并且不容易与外界集成。另一方面,对于它擅长的事情,它是非常非常好的。很少有东西比较。有一家公司有合理的支持,谁知道投入了多少人年。这在工业中可能很重要。

严格查看您的 Python 与 MATLAB 比较,它们大多是针对不同工作的不同工具。在它们确实有些重叠的领域,很难说更好的路线是什么(很大程度上取决于你想要做什么)。但大多数情况下,Python 并不擅长 MATLAB 的核心优势,反之亦然。

于 2008-10-07T20:47:37.370 回答
38

大多数答案都没有抓住重点。

matlab 如此优秀和如此广泛使用的原因之一是:

极快的编码

我是一名计算机视觉博士生,使用 matlab 已经 4 年了,在我攻读博士学位之前,我使用不同的语言,包括 C++、java、php、python ......大多数计算机视觉研究人员都只使用 matlab。

1) 研究人员需要快速原型

在研究环境中,我们(希望)经常有新想法,我们希望快速测试它们,看看是否值得继续朝这个方向发展。大多数情况下,我们编写的代码中只有一小部分有用。

Matlab在执行时通常较慢,但我们并不在意。因为我们事先不知道什么方法会成功,所以我们必须尝试很多事情,所以我们的瓶颈是编程时间,因为我们的代码通常会运行几次才能获得结果发布,那就是全部。

那么让我们看看matlab如何提供帮助。

2)我需要的一切都已经有了

Matlab 确实有很多我需要的功能,所以我不必一直重新发明它们:

将矩阵的索引更改为 2d 坐标:ind2sub提取图像的所有补丁:im2col;计算图像的直方图hist(Im(:)):查找列表中的唯一元素unique(list);将向量添加到矩阵的所有向量bsxfun(@plus,M,V);n维数组上的卷积convn(A);计算代码子部分的计算时间:tic; %%code; toc;裁剪图像的图形界面:imcrop(im);

列表可能很长......并且通过使用帮助很容易找到它们。

最接近的就是python了...不过就是python的一个痛点,每次都要去google找自己需要的函数名,然后还要加包,包不兼容一个接一个,矩阵的格式发生变化,卷积函数只处理双精度但我给它char时不会出错,只是给出错误的输出......没有

3) 集成开发环境

一个例子:我启动一个脚本。由于矩阵,它会产生错误。我仍然可以使用命令行执行代码。我想象它在做:imagesc(matrix). 我看到矩阵的最后一行很奇怪。我修复错误。所有变量仍然设置。我选择了剩下的代码,按 F9 执行选择,一切继续。多亏了这一点,调试变得很快。

Matlab 在执行前强调了我的一些错误。所以我可以很快看到问题。它提出了一些让我的代码更快的方法。

IDE 中包含一个很棒的分析器。与此相比,KCahcegrind 使用起来非常痛苦。

python 的 IDE 非常棒。没有 ipython 的 python 是不可用的。我从来没有设法使用 ipython 进行调试。

+自动完成,函数参数的帮助,...

4)简洁的代码

为了标准化矩阵的所有列(我一直需要),我这样做: bsxfun(@times,A,1./sqrt(sum(A.^2)))

要从矩阵中删除总和较小的所有列:

A(:,sum(A)<e)=[]

在 GPU 上进行计算

gpuX = gpuarray(X); 
%%% code normally and everything is done on GPU

使我的代码瘫痪:

parfor n=1:100
%%% code normally and everything is multi-threaded

什么语言能打败它?

当然,我很少需要创建循环,所有内容都包含在函数中,这使代码更易于阅读,而且索引也不会令人头疼。所以我可以专注于我想要编程的内容,而不是如何编程。

5) 绘图工具

Matlab 以其绘图工具而闻名。他们非常有帮助。

Python 的绘图工具的功能要少得多。但是有一件事超级烦人。每个脚本只能绘制一次数字???如果我有脚本,我无法在每一步都显示东西--->没用。

6) 文档

一切都非常容易访问,一切都非常清晰,功能名称选择得很好。使用 python,我总是需要在谷歌上搜索东西,查看论坛或 stackoverflow.... 完成时间。

PS:最后,我讨厌 matlab 的地方:它的价格

于 2011-12-01T19:44:12.893 回答
34

多年来,我一直在使用 matlab 进行研究。它非常适合线性代数,并且有大量编写良好的工具箱。最新版本开始将其推向更接近通用语言(更好的优化器、更好的对象模型、更丰富的范围规则等)。

去年夏天,我有一份工作,我使用 Python + numpy 而不是 Matlab。我很享受节奏的变化。它是一种“真正的”语言(以及所需要的一切),并且它具有一些很棒的数字功能,例如广播数组。我也很喜欢 ipython 环境。

以下是我更喜欢 Matlab 的一些东西:

  • 一致性: MathWorks 花了很多精力使工具箱看起来和工作起来都一样。他们还没有完成完美的工作,但这是我见过的有几十年历史的代码库中最好的之一。
  • 文档:我发现在 numpy 和/或 python 中找出一些东西非常令人沮丧,因为文档质量参差不齐:有些东西记录得很好,有些根本没有。当我看到看起来像 Matlab 的东西时,通常最令人沮丧,但工作方式却不尽相同。能够获取源代码是无价的(公平地说,大多数 Matlab 工具箱也附带源代码)
  • 紧凑性:对于我所做的,Matlab 的语法通常更紧凑(但并非总是如此)
  • 动力:我现在有太多 Matlab 代码要更改

如果我没有这么大的现有代码库,我会认真考虑切换到 Python + numpy。

于 2008-10-10T23:47:23.830 回答
15

抓住一切。你最后一次用计算器编程玩俄罗斯方块是什么时候?你真的认为你可以在这 128k 的 RAM 中写任何你想要的东西吗?可能不会。MATLAB 不是用于编程的,除非您正在处理巨大的矩阵。当您有兆字节到千兆字节的数据需要处理和/或绘制时,它就是您可以使用的图形计算器。只学习基本的东西,但也不要为了让 Python 成为图形计算器而自杀。

当您想在 MATLAB 中进行处理、绘图或探索,以及何时想要拥有 Python 提供的所有功能时,您会很快感觉到。许多工程师转向使用 Python 或 Perl 进行预处理和后处理。有时甚至只是向 MATLAB 求助。

它们是完全不同的工具,你应该首先了解它们的基本优势,而不是试图用另一个来代替。为了省钱,我要么使用 Octave,要么轻松地学习使用 Perl 或 Python 中的稀疏矩阵。

于 2008-10-08T05:53:11.513 回答
13

MATLAB 非常适合进行数组操作、专门的数学函数以及快速创建漂亮的图。

如果我可以使用大量数组/矩阵操作,我可能只会将它用于大型程序。

您不必像在更正式的软件包中那样担心 IDE,因此对于没有大量编程经验的学生来说更容易上手。

于 2008-10-07T19:13:08.437 回答
12

MATLAB 是一种流行且广泛适用的复杂软件包。认为它只是一个数学软件是错误的,因为它具有广泛的“工具箱”。我最近使用Matplotlib从数据库中绘制了一些数据,它完成了这项工作,而不需要 MATLAB 的所有花里胡哨。但是,在每种情况下比较 Python 和 MATLAB 可能并不合适。与其他一切一样,决定取决于您需要做什么。

我在本科时使用 MATLAB 进行控制系统设计和仿真,还在研究生院进行图像处理。由于强大的控制和图像处理工具箱,MATLAB 对这些领域最有意义。正如大家所提到的,在您需要编写的每个 MATLAB 脚本中使用的数组操作在 MATLAB 中非常容易。

MATLAB 的另一个好处是,使用内置工具箱函数进行原型设计和尝试想法非常容易和快速。例如,导入图像并计算其直方图或对其进行一些简单的处理并不费力。MATLAB 的一个缺点可能是它的速度,因为它具有解释性。但是,如果一个人真的需要速度,他可以选择在 C/C++ 等中实现测试的逻辑。

为了进一步与 Python 进行比较,我可以说 MATLAB 为您提供了一个完整的包来完成您的工作,而无需四处寻找外部库和实现额外的函数。

我看到的关于 MATLAB 的最后一点在这里的答案中没有提到,它有一个非常强大的可视化建模/仿真环境,称为Simulink。使用 Simulink 可以更轻松地设计和仿真更大的系统。

最后,同样,这完全取决于您需要解决的问题。如果您的问题域可以使用 MATLAB 的工具箱之一并且您可以访问 MATLAB,那么您可以确定您将拥有正确的工具来解决它。

于 2008-10-08T04:41:56.260 回答
10

正如其他人所提到的,MATLAB 非常擅长矩阵操作,最初是作为用于线性代数的著名BLASLAPACK库的扩展而构建的。它与 Java 等其他语言的接口很好,并且因其开发良好且文档化的库而受到工程和科学公司的青睐。根据我对 Python 和 NumPy 的了解,虽然它们共享 MATLAB 的许多基本功能,但它们的库并没有完整的广度和深度。

就个人而言,我使用 MATLAB 是因为那是我在实习中学到的,那是我在研究生院使用的,也是我在第一份工作中使用的。我对 Python(或任何其他语言)没有任何反对意见。这也是我常用的。

此外,除了来自 gnu的 @Jim C提到的 scilab 之外,还有另一个免费版本,称为Octave

于 2008-10-07T19:34:09.080 回答
7

就个人而言,我倾向于将 Matlab 视为具有一些脚本功能的交互式矩阵计算器和绘图工具,而不是像 Python 或 C 这样的成熟编程语言。它成功的原因是矩阵的东西和绘图工作盒子,你可以在里面做一些非常具体的事情,几乎没有实际的编程知识。正如您所指出的,该语言在用于更通用的任务时非常令人沮丧,例如即使是最简单的字符串处理。它的语法很古怪,并且在创建它时并没有考虑到超过 100 行左右的项目所需的抽象。

我认为人们尝试使用 Matlab 作为一种严肃的编程语言的原因是大多数工程师(也有例外;我的学位是生物医学工程,我喜欢编程)都是糟糕的程序员并且讨厌编程。他们在大学里学习 Matlab 主要是为了矩阵数学,并且他们学习了一些基本的编程作为学习 Matlab 的一部分,并且只是假设 Matlab 足够好。除了一些纯数字运算应用程序之外,我想不出我认识的任何人都知道除了 Matlab 之外的任何语言,但仍然将 Matlab 用于任何其他应用程序。

于 2008-10-08T03:53:22.520 回答
6

它在大学中如此广泛使用的最可能的原因是数学教师已经习惯了它,理解它,并且知道如何将它纳入他们的课程中。

于 2008-10-07T19:13:16.093 回答
6

matplotlib+pylabNumPy之间,除了@Adam Bellaire 所建议的文化惯性之外,我认为 Matlab 和 python 之间并没有太大的实际区别。

于 2008-10-07T19:17:03.247 回答
6

我相信你有一个很好的观点,它是在我工作的公司提出的。由于涉及许可费用,该公司在应用 matlab 的能力方面受到限制。一位开发人员证明 Python 是一个非常合适的替代品,但它落入了无知的耳朵,因为对于那些耳朵的所有者......

  1. 尽管我们中的许多人都想使用它,但公司里没有人知道 Python。
  2. MatLab 背后有一个名字、一个公司和一个工作组来解决任何问题。
  3. 有一些(但不是很多)遗留的 MatLab 项目需要重新编写。

如果它值 10,000 英镑(??)它一定是值得的!!

我在这里和你在一起。Python 是 MatLab 的一个很好的替代品。

我应该指出,我被告知该公司可能使用了 MatLabs 功能的 5% 到 10%,这是我同意原始海报的基础

于 2008-10-07T19:40:56.070 回答
6

MATLAB 是一个很棒的工具

  • 原型制作
  • 工程模拟与
  • 数据的快速可视化

您可以非常有效地在数据集上玩、可视化和测试您的想法。它不应被视为用于产品开发的其他软件语言的替代品。我强烈推荐它用于上述任务,尽管它很昂贵 - Octave和 Python 等免费替代品正在迎头赶上。

于 2008-12-16T07:30:31.400 回答
5

似乎是纯粹的惯性。用在哪里,大家都忙着学习IDL或numpy足够详细的切换,也不想重写好的工作程序。幸运的是,这并不完全正确,但在足够多的地方足够正确,Matlab 将存在很长时间。像 Fortran (在我工作的地方积极使用!)

于 2008-10-08T02:14:20.660 回答
4

它在工业中有用的主要原因是建立在核心功能之上的插件。过去几年中几乎所有活跃的 Matlab 开发都集中在这些方面。

不幸的是,你不会有太多机会在​​学术环境中使用这些。

于 2008-10-07T19:21:18.810 回答
4

MATLAB 在大学中受欢迎的一个原因与很多东西在大学中受欢迎的原因相同:有很多教授熟悉它,而且它相当强大。

我已经与许多对 MATLAB 开发 GPU 而不是串行工作的新兴能力特别感兴趣的人交谈过。在研究生院使用 Python 之后,我有点希望在这种情况下能够使用 MATLAB。它肯定会使向量空间计算变得轻而易举。

于 2008-10-07T19:40:25.433 回答
4

MATLAB 是常用库的包装器。在许多情况下,它仍然是。当您获得更大的数据集时,它有许多额外的优化,包括检查和特殊情况下的常见问题(例如,在有用的地方减少到稀疏矩阵),以及处理边缘情况。通常,您可以将标准形式的问题提交给通用函数,它将根据您的数据确定要使用的最佳底层算法。对于小的 N,所有算法都很快,但 MATLAB 使确定最佳算法成为非问题。

这是由讨厌 MATLAB 的人编写的,并且由于集成问题而试图替换它。从您的问题中,您提到获得 MATLAB 5 并将其用于课程。在那个级别,您可能想查看 Octave,这是一个具有相同语法的开源实现。我猜它现在已经达到了 MATLAB 5 级别(我只玩它)。这应该可以让你“通过考试”。对于裸 MATLAB 功能,它似乎很接近。它缺乏工具箱支持(同样,它主要用于将函数调用重新定义为该领域工程师熟悉的形式,并选择正确的底层算法来使用)。

于 2008-10-08T05:52:33.073 回答
4

我知道这个问题很老,因此可能不再被观看,但我觉得有必要发表评论。作为佐治亚理工学院的航空工程师,我可以毫不犹豫地说 MATLAB 非常棒。您可以让它与您的 Excel 电子表格快速交互,以获取有关火箭飞行的高度和速度、风如何影响这些相同的火箭以及不同引擎的重要性的数据。除了火箭,类似的概念也适用于汽车、卡车、飞机、航天器,甚至是田径运动。您可以提取大量数据,操纵所有数据,并确保您的结果是应有的。如果出现问题,您可以在出现错误的地方添加换行符来调试程序,而无需每次运行程序时都重新编译。它比其他一些程序慢吗?嗯,从技术上讲。一世'

作为一种通用的编程语言,MATLAB 是薄弱的。它不适用于 Python、Java、ActionScript、C/C++ 或任何其他通用语言。顾名思义,它适用于工程和数学领域,而且做得非常好。

于 2009-07-11T06:02:31.317 回答
3

自从我使用 Matlab 已经有一段时间了,但是从内存中它确实提供了(尽管有额外的插件)生成源代码的能力,以允许您在 DSP 上实现您的算法。

由于 python 是一种通用编程语言,所以没有理由不能在 python 中完成在 matlab 中可以完成的所有操作。但是,matlab 确实提供了许多其他工具 - 例如。非常广泛的 dsp 特性,广泛的 S 和 Z 域特性。

所有这些都可以用 python 手动编码(因为它是一种通用语言),但如果你所追求的只是结果,那么在 Matlab 上花钱是更便宜的选择吗?

这些功能也针对性能进行了调整。例如。Numpy 的文档指定他们的傅立叶变换针对 2 点数据集的功率进行了优化。据我了解,Matlab 已被编写为使用最有效的傅立叶变换来适应数据集的大小,而不仅仅是 2 的幂。

编辑:哦,在 Matlab 中,您可以很容易地制作一些看起来很吸引人的图,这在您展示数据时很重要。同样,使用其他工具当然不是不可能的。

于 2008-10-07T22:46:25.650 回答
3

当您注意到 Matlab “使用矩阵和绘图很酷”时,我认为您回答了自己的问题。任何需要大量矩阵数学和可视化的应用程序都可能在 Matlab 中最容易完成。

也就是说,Matlab 的语法感觉很别扭,显示出语言的年代。相比之下,Python 是一种更好的通用编程语言,并且通过正确的库可以完成 Matlab 所做的大部分工作。但是,对于向量和矩阵操作,Matlab 的语法总是比 Python 更简洁。

如果您的大部分编程都涉及这些类型的操作,例如信号处理和一些统计技术,那么 Matlab 将是一个更好的选择。

于 2008-10-08T04:03:27.897 回答
2

先发优势自 1970 年代后期以来, Matlab一直存在。Python 是最近才出现的,使其适用于 Matlab 类型任务的库甚至是最近才出现的。人们习惯了 Matlab,所以他们使用它。

于 2008-10-07T19:28:58.543 回答
2

Matlab 擅长进行数字运算。还有矩阵和矩阵操作。它有许多有用的内置库(取决于什么版本)如果你要计算方程,我认为它比 python 更容易使用。

于 2009-12-11T21:00:44.033 回答