什么是MATLAB的好处? 为什么大学如此使用? 什么时候比Python好?

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

对于在大学里工作的研究人员和人来说,什么使它变得如此酷? 我发现使用matrix和绘制事物是很酷的(使用一些库可以在Python中轻松完成)。

编写一个函数或parsing一个文件是痛苦的。 我还在起步,我错过了什么?

在“真实”的世界里,我应该怎么想呢? 什么时候可以比Python做得更好? 为了更好,我的意思是:简单的方法来写一些表演。


更新1:我最想知道的事情之一是“我错过了什么? :d

更新2:谢谢你的回答。 我的问题不在于购买或不购买MATLAB。 大学有可能给我一个免费的旧版本的MATLAB(我猜测是MATLAB 5)的副本,而不会破坏许可证。 我对它的能力感兴趣,如果它值得深入研究(我不需要比基本的 MATLAB或者其他更多的东西来通过考试:P),对于真正的特定任务,它确实比Python更好世界。

亚当只是部分正确。 即使不是大多数,math家也绝不会碰它。 如果有一个计算机工具使用,它将是像Mathematica或枫叶 。 另一方面,工程部门经常依赖它,对于一些应用math家来说,肯定有用。 在某些领域也被大量使用。

你必须认识到关于MATLAB的一点是,它开始作为Fortran库的线性代数包装。 很长一段时间,它有一个“全世界都是双打(花车)”的态度。 作为一门语言,它已经发展得非常有机,而且如果你把它看作是一种编程语言,那么它就有很多的缺陷。

但是,如果将其视为进行某些types研究的环境,则具有一些实际的优势。 这与浮点线性代数的效果差不多。 符号简单而强大,执行速度快,值得信赖。 这是非常好的生成情节和其他互动任务。 有大量的“工具箱”具有良好的特定任务代码,价格合理。 有大量的用户共享数字代码(Python + NumPy在同一个联盟中至less没有任何东西)

Python,疣和所有,是一个更好的编程语言(许多其他)。 不过,就这个工具而言,这已经有十年左右的时间了。

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

对于一般的编程语言来说,这是一个糟糕的select。 它很古怪,很多任务很慢(你需要vector化的东西来获得高效的代码),并不容易与外部世界整合。 另一方面,对于擅长的事情来说,这是非常好的。 很less有比较的东西。 有一个公司有合理的支持,谁知道投入多less年。 这在工业上可能很重要。

严格看你的Python与MATLAB的比较,他们大多是不同的工作不同的工具。 在它们重叠的地方,很难说要走的路是什么(取决于你想做什么)。 但是大多数Python对于MATLAB的核心优势并不是很好,反之亦然。

大部分答案都没有得到重视。

有一个原因,matlab是如此之好,如此广泛的使用:

极快的编码

我是一名计算机视觉博士学位的学生,已经使用matlab 4年了,之前我的博士学位使用不同的语言,包括C ++,Java,PHP,Python …大多数计算机视觉研究人员正在使用专门的MATLAB。

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

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

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

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

2)我需要的一切已经在那里了

Matlab有很多我需要的function,所以我不必一直重新创build它们:

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

名单可能很长…而且通过使用帮助很容易find。

最接近的是python …但是这只是一个python的痛苦,我不得不每次去谷歌寻找我需要的函数的名称,然后我需要添加包,和包不兼容一个与另一个,matrix的格式改变,卷积函数只处理双打,但不会犯错误,当我给它的字符,只是给一个错误的输出…没有

3)IDE

举个例子:我启动一个脚本。 它由于matrix而产生错误。 我仍然可以用命令行执行代码。 我想象它做: imagesc(matrix) 。 我看到matrix的最后一行很奇怪。 我修复了这个错误。 所有variables仍然设置 。 我select其余的代码,按F9执行select,一切都继续。 由于这一点, debugging变得快速

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

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

Python的IDE是awefull。 没有ipython的python是不可用的。 我从来没有设法debugging,使用ipython。

+自动完成,帮助函数参数,…

4)简洁的代码

为了规范matrix的所有列(我一直需要),我这样做: bsxfun(@times,A,1./sqrt(sum(A.^2)))

要从matrix中删除所有小数目的列:

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 

什么语言可以打败?

当然,我很less需要循环,一切都包含在函数中,这使得代码方式更容易阅读,而且不会有索引头痛。 所以我可以专注于我想编程的东西,而不是如何编程。

5)绘图工具

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

Python的绘图工具的function要less得多。 但是有一件事超级烦人。 每个脚本只能绘制一次数字 如果我有脚本我不能在每一步显示的东西—>无用的。

6)文件

一切都非常快速访问,一切都很清晰,function名称是精心挑选的。 随着python,我总是需要谷歌的东西,看在论坛或stackoverflow ….完成时间猪。

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

我一直在研究中使用matlab多年。 对于线性代数来说非常好,并且有一大堆写得很好的工具箱。 最近的版本开始推动它接近通用语言(更好的优化器,更好的对象模型,更丰富的范围规则等)。

今年夏天,我做了一个使用Python + numpy而不是Matlab的工作。 我喜欢节奏的变化。 这是一种“真正”的语言(以及所有这些),它具有一些很棒的数字function,如广播arrays。 我也非常喜欢ipython环境。

这里有一些我喜欢Matlab的东西:

  • 一致性: MathWorks花费了大量的精力,使得工具箱看起来像一个一样的工作。 他们没有做出完美的工作,但这是我见过的几十年的代码库中最好的一个。
  • 文档:我发现在numpy和/或python中找出一些东西是非常令人沮丧的,因为文档质量很差:有些东西logging得非常好,有些则根本没有。 当我看到似乎模仿Matlab的东西时,通常是最令人沮丧的,但是并不完全相同。 能够获取源代码是非常宝贵的(公平地说,大部分的Matlab工具箱也随附源代码)
  • 紧凑性:对于我所做的,Matlab的语法通常更加紧凑(但并不总是)
  • 势头:我现在有太多的Matlab代码要改变了

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

抓住一切。 当你最后一次计算你的计算器玩俄罗斯方块吗? 你真的认为你可以在这128k的RAM中写任何你想要的东西吗? 可能不是。 除非你处理巨大的matrix,否则MATLAB不适用于编程。 当你有兆字节到千兆字节的数据来紧缩和/或绘图时,这是你抠出的graphics计算器。 学习基本的东西,但也不要自杀,试图使Python成为一个graphics计算器。

您将很快感受到什么时候您想要紧缩,在MATLAB中进行绘图或探索,以及何时想要获得所有Python提供的function。 许多工程师转而使用Python或Perl进行预处理和后处理。 有时候甚至只是向MATLAB拨出硬件位。

他们是完全不同的工具,你应该先学习他们的基本力量,而不是试图互相取代。 为了节省资金,我要么使用Octave或轻松撇号,并学习使用Perl或Python中的稀疏matrix。

MATLAB非常适合做数组操作,做专门的math函数以及快速创build好的图表。

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

您不必担心更多的正式软件包,所以对于没有丰富编程经验的学生来说更容易。

MATLAB是一个stream行的,广泛适用的复杂软件包。 因为它有很多“工具箱”,所以认为它只是一个math软件是错误的。 我最近使用Matplotlib来绘制数据库中的一些数据,而不需要MATLAB的所有function。 但是,在任何情况下比较Python和MATLAB可能都不合适。 和其他一切一样,决定取决于你需要做什么。

我在MATLAB中用于控制系统的devise和仿真,也用于研究生image processing。 对于这些领域,由于function强大的控制和image processing工具箱,MATLAB是最有意义的。 正如大家所提到的那样,MATLAB中需要编写的每个MATLAB脚本中使用的数组操作都非常简单。

MATLAB的另一个好处是,使用内置的工具箱function进行原型devise和试验是非常容易和快速的。 例如,不需要导入图像并计算直方图,或者做一些简单的处理。 MATLAB的一个缺点可能是速度,因为它的解释性质。 但是,如果真的需要速度,他可以select在C / C ++中实现testing逻辑。

为了与Python进行进一步的比较,我可以说MATLAB为您提供了一个完整的包,可以在不需要外部库和额外function的情况下完成工作。

我看到的关于MATLAB的最后一点在这里的答案中没有提到,它有一个非常强大的可视化build模/仿真环境Simulink 。 使用Simulinkdevise和模拟更大的系统会更容易。

最后,这一切都取决于你需要解决的问题。 如果您的问题域可以使用MATLAB的工具箱,并且您可以访问MATLAB,那么您可以确定您将拥有正确的工具来解决这个问题。

正如其他人所说的,MATLAB在matrix处理方面非常出色,最初是作为用于线性代数的众所周知的BLAS和LAPACK库的扩展而构build的。 它与Java等其他语言良好接口,并且由于其良好开发和logging的图书馆而受到工程和科学公司的青睐。 从我所了解的Python和NumPy中,虽然他们共享MATLAB的许多基本function,但是它们的库并没有足够的function和广度。

就个人而言,我使用MATLAB是因为这是我在实习中学到的东西,这正是我在gradle时使用的,这正是我在第一份工作中所使用的。 我没有任何反对Python(或任何其他语言)的东西。 这也正是我用的。

此外,还有另外一个免费版本,除了吉姆C从gnu提到的叫做Octave的 scilab。

就我个人而言,我倾向于将Matlab看作是一种交互式matrix计算器和绘图工具,具有一些脚本function,而不是像Python或C这样的全面的编程语言。其成功的原因是matrix和绘图工作盒子,你可以做几个非常具体的事情,几乎没有实际的编程知识。 正如您所指出的那样,使用更通用的任务(如最简单的string处理)的语言是非常令人沮丧的。 它的语法是古怪的,它不是创build超过100行左右的项目所需的抽象。

我认为人们试图将Matlab作为一种严肃的编程语言的原因是,大多数工程师(有例外,我的学位是生物医学工程学,而且我喜欢编程)是可怕的程序员,也很讨厌编程。 他们在大学里被教授的Matlab主要是matrixmath,他们学习了一些基本的程序devise作为学习Matlab的一部分,并且假设Matlab是足够好的。 我想不出有谁知道除了Matlab之外的任何语言,但是除了一些纯粹的数字运算应用之外,还是使用Matlab来完成其他任何function。

在大学里被广泛使用的最可能的原因是math教师习惯了,理解它,并且知道如何将它融入课程中。

在matplotlib + pylab和NumPy之间,我认为除了@Adam Bellairebuild议的文化惰性之外,Matlab和python之间没有太多的实际区别。

我相信你有一个很好的观点,那就是在我工作的公司里提出的观点。 由于所涉及的许可费用,公司在应用matlab方面的能力有限。 一位开发人员certificate,Python是一个非常合适的替代品,但因为耳朵的所有者,

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

如果它的价值£10,000(??)它是值得的!

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

我应该指出,我曾被告知该公司使用MatLabsfunction的5%到10%,这是我与原始海报达成一致的基础

MATLAB是一个很棒的工具

  • 原型
  • 工程模拟和
  • 数据的快速可视化

你可以非常有效地在数据集上玩,想象和testing你的想法。 它不应被视为用于产品开发的其他软件语言的替代品。 我强烈推荐它用于上述任务,尽pipe它是昂贵的 – 像Octave和Python这样的免费替代品正在迎头赶上。

似乎是纯粹的惯性。 在哪里使用,每个人都忙于学习IDL或足够详细的numpy切换,而不想重写好的工作程序。 幸运的是,这并不完全正确,但是在足够长的时间内Matlab已经足够了。 像Fortran一样(在我工作的地方积极使用!)

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

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

我知道这个问题是老的,因此可能不再被观察,但我觉得有必要发表评论。 作为乔治亚理工学院的航空航天工程师,我可以毫不犹豫地说,MATLAB非常棒。 您可以快速与Excel电子表格进行交互,以获取有关火箭飞行高度和速度的信息,风向如何影响相同的火箭,以及不同的发动机。 除了火箭之外,汽车,卡车,飞机,太空船,甚至田径运动都有类似的概念。 你可以拉大量的数据,操纵所有的数据,并确保你的结果是他们应该的。 在事件closures的情况下,您可以在发生错误时添加换行符来debugging程序,而无需在每次运行程序时重新编译。 比其他一些程序慢吗? 那么,技术上呢。 我敢肯定,如果你想在数字graphics处理器上进行数字处理,那么在NVIDIAgraphics处理器上的处理速度可能会更快,但是在debugging时要花费更多的精力。

作为一种通用的编程语言,MATLAB很薄弱。 这并不意味着对Python,Java,ActionScript,C / C ++或任何其他通用语言。 这意味着工程和math的名字所暗示的利基,而且它非常出色。

MATLAB是一个常用库的封装。 而且在很多情况下还是这样。 当你得到更大的数据集,它有很多额外的优化,包括检查和特殊的套pipe常见问题(例如减less到稀疏matrix),并处理边缘情况。 通常,您可以将标准forms的问题提交给一般函数,并根据您的数据确定使用的最佳底层algorithm。 对于小的N,所有algorithm都是快速的,但是MATLAB使得确定最优algorithm成为一个非问题。

这是由一个讨厌MATLAB的人编写的,并且由于集成问题而试图replace它。 从你的问题,你提到获得MATLAB 5和使用它的课程。 在这个层面上,你可能想看看Octave ,一个开放源代码实现,语法相同。 我猜这是到现在的MATLAB 5级(我只是玩它)。 这应该让你“通过考试”。 对于裸MATLABfunction,它似乎是接近。 它缺less对工具箱的支持(这又一次主要用于重新调整工程师熟悉的forms的函数调用,并select正确的底层algorithm来使用)。

MATLAB在大学里stream行的一个原因是大学很多stream行的原因是一样的:有许多熟悉它的教授,而且相当强大。

我已经和很多对MATLAB新生的能力感兴趣的人交stream过了,而不是连续工作。 在gradle的时候使用了Python,我希望在这种情况下,我有舔与MATLAB的工作。 它肯定会使向量空间计算轻而易举。

使用Matlab已经有一段时间了,但是从内存来看,它确实提供了(尽pipe有额外的插件)生成源代码的能力,使您可以在DSP上实现您的algorithm。

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

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

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

编辑:哦,在Matlab中,您可以非常容易地制作一些令人震惊的外观图,这在您展示数据时非常重要。 再次,使用其他工具当然不是不可能的。

当你注意到Matlab是“很酷的使用matrix和绘制事物”的时候,我认为你回答了你自己的问题。 任何需要大量matrixmath和可视化的应用程序在Matlab中最容易实现。

也就是说,Matlab的语法很尴尬,并且显示了语言的年龄。 相比之下,Python是一个更好的通用编程语言,使用正确的库可以完成Matlab所做的大部分工作。 但是,对于向量和matrix操作,Matlab总是比Python有更简洁的语法。

如果你的许多编程涉及到这些操作,比如在信号处理和一些统计技术上,那么Matlab将是一个更好的select。

先动者优势 。 自20世纪70年代后期以来, Matlab已经存在。 Python最近也出现了,最近使得它适合Matlabtypes任务的库也出现了。 人们习惯于Matlab,所以他们使用它。

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