我最近被要求为一堂课学习一些MATLAB基础知识。
对于在大学工作的研究人员和人们来说,它是如何变得如此酷? 我看到使用矩阵和绘制事物很酷......(使用某些库可以在Python中轻松完成的事情)。
编写函数或解析文件真是太痛苦了。我还在开始,我错过了什么?
在“真实”世界中,我应该怎么想用它?什么时候它应该比Python做得更好?为了更好,我的意思是:简单的方式来写一些表演。
更新1:我最想知道的一件事是“我错过了什么吗?” :d
更新2:感谢您的回答。我的问题不是购买或不购买MATLAB。大学有可能免费给我一份旧版本的MATLAB(我猜的是MATLAB 5),而不会违反许可证。我对它的功能很感兴趣,如果它值得进行更深入的研究(我将不需要更多的基本的 MATLAB来通过考试:P)它真的会比Python更好现实世界中的特定任务。
答案 0 :(得分:77)
亚当只是部分正确。许多(如果不是大多数)数学家永远不会触及它。如果根本使用计算机工具,它将类似Mathematica或Maple。另一方面,工程部门经常依赖它,对于一些应用数学家来说肯定是有用的。它在某些领域也在工业中大量使用。
你必须要认识到的关于MATLAB的一点是它开始作为线性代数的Fortran库的包装器。很长一段时间,它的态度是“全世界都是一系列双打(花车)”。作为一种语言,它已经非常有机地发展,并且如果你把它看作是一种编程语言,那么它就会有很多缺陷。
但是,如果将其视为进行某些类型研究的环境,它具有一些真正的优势。它与浮点线性代数一样好。该表示法简单而强大,实现快速且可信。它非常擅长生成绘图和其他交互式任务。有大量的“工具箱”具有适合特定任务的良好代码,价格合理。有一大群用户共享数字代码(Python + NumPy在同一个联盟中没有任何东西,至少还没有)
Python,疣和所有,是一种更好的编程语言(和许多其他语言一样)。然而,就工具而言,它已落后十年左右。
关键是大多数使用MATLAB的人真的不是程序员,也不想成为程序员。
这是一种通用编程语言的糟糕选择;它很古怪,很多任务都很慢(你需要对事物进行矢量化以获得有效的代码),并且不容易与外部世界集成。另一方面,对于它擅长的东西,它是非常好的。很少有比较的东西。有一家公司有合理的支持,谁知道投入了多少人年。这在行业中很重要。
严格关注Python与MATLAB的比较,它们大多是针对不同工作的不同工具。在它们确实重叠的区域,很难说最好的路线是什么(取决于你要做的事情)。但是,大多数Python并不擅长MATLAB的核心优势,反之亦然。
答案 1 :(得分:38)
大多数答案都不明白。
有一个原因是matlab如此优秀且如此广泛使用:
我是一名计算机视觉博士生,并且已经使用matlab 4年了,在我的博士学位之前我使用不同的语言,包括C ++,java,php,python ......大多数计算机视觉研究人员都使用专门的matlab。 / p>
在研究环境中,我们(希望)经常有新的想法,我们想要快速测试它们,看看是否值得继续朝这个方向发展。而且大多数情况下,我们编码的内容中只有一小部分是有用的。
Matlab在执行时通常较慢,但我们并不在意。因为我们事先不知道哪种方法会成功,所以我们必须尝试很多东西,所以我们的瓶颈是编程时间,因为我们的代码最常运行几次才能获得要发布的结果,就是这样。
让我们看看matlab如何提供帮助。
Matlab确实有很多我需要的功能,所以我不必一直重新发明它们:
将矩阵的索引更改为2d坐标:ind2sub
提取图像的所有补丁:im2col
;计算图像的直方图:hist(Im(:))
;在列表unique(list)
中找到唯一元素;向矩阵bsxfun(@plus,M,V)
的所有向量添加向量; n维数组上的卷积convn(A)
;计算代码子部分的计算时间:tic; %%code; toc
;裁剪图像的图形界面:imcrop(im)
;
列表可能很长...... 通过使用帮助很容易找到它们。
最接近它的是python ...但是这只是python中的一个痛苦,我每次都要去谷歌寻找我需要的功能的名称,然后我需要添加包和包相互不兼容,矩阵的格式改变,卷积函数只处理双打但是当我给它char时不会出错,只是给出错误的输出......没有
一个例子:我启动一个脚本。由于矩阵,它会产生错误。 我仍然可以使用命令行执行代码。我可视化它:imagesc(matrix)
。我看到矩阵的最后一行很奇怪。我修复了这个bug。 所有变量仍然设置。我选择剩余的代码,按F9执行选择,一切都继续。 Debuging变得快速,多亏了这一点。
Matlab在执行之前强调了我的一些错误。所以我可以很快看到问题所在。它提出了一些方法来加快我的代码。
IDE中包含了一个非常棒的 profiler 。与此相比,KCahcegrind使用起来非常痛苦。
python的IDE非常棒。没有ipython的python不可用。我从未设法使用ipython进行调试。
+ autocompletion,帮助函数参数,......
为了规范化矩阵的所有列(我一直需要它),我做:
bsxfun(@times,A,1./sqrt(sum(A.^2)))
要从矩阵中删除所有小数量的colums:
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
用什么语言可以打败它?
当然,我很少需要创建循环,所有东西都包含在函数中,这使得代码更容易阅读,并且没有索引的头痛。因此,我可以专注于我想要编程的内容,而不是如何编程。
Matlab以其绘图工具而闻名。他们非常有帮助。
Python的绘图工具功能要少得多。但有一件事太烦人了。每个脚本只能绘制一次数字???如果我有脚本,我不能在每一步显示东西---&gt;无用的。
一切都很快,一切都很清晰,功能名称很好。 使用python,我总是需要谷歌的东西,看看论坛或stackoverflow ....完成时间的猪。
PS:最后,我讨厌matlab:它的价格
答案 2 :(得分:34)
在我的研究中,我一直在使用matlab多年。它非常适合线性代数,并且拥有大量精心编写的工具箱。最新版本开始将其推向更接近通用语言(更好的优化器,更好的对象模型,更丰富的范围规则等)。
去年夏天,我有一份工作,我使用Python + numpy而不是Matlab。我很喜欢节奏的变化。它是一种“真正的”语言(并且所有这些都需要),它具有一些很棒的数字功能,如广播阵列。我也非常喜欢ipython环境。
以下是我更喜欢Matlab的一些内容:
如果我没有这么大的现有代码库,我会认真考虑切换到Python + numpy。
答案 3 :(得分:15)
抓住一切。你最后一次编程计算器来玩俄罗斯方块的时间是什么时候?你真的认为你可以在那些128k的RAM中写下你想要的东西吗?可能不是。除非您处理大型矩阵,否则MATLAB不用于编程。当你有兆字节到千兆字节的数据进行处理和/或绘图时,它就是你的图表计算器。学习基本的东西,但也不要试图让Python成为图形计算器。
您可以快速了解何时想要在MATLAB中进行处理,绘图或探索以及何时想要拥有所有Python提供的内容。许多工程师转而使用Python或Perl进行前后处理。偶尔甚至只是向MATLAB呼叫硬比特。
它们是完全不同的工具,你应该首先学习它们的基本优势,而不是试图用另一个替换它们。为了节省金钱,我要么使用Octave,要么轻松使用,并学习使用Perl或Python中的稀疏矩阵。
答案 4 :(得分:13)
MATLAB非常适合进行数组操作,执行专门的数学函数,以及快速创建漂亮的图。
如果我可以使用大量的数组/矩阵操作,我可能只会将它用于大型程序。
您不必像在更正式的软件包中那样担心IDE,因此没有丰富编程经验的学生更容易接受。
答案 5 :(得分:12)
MATLAB是一种广受欢迎且广受欢迎的作品 精密的软件包。思考是个错误 它只是一个数学软件,因为它有广泛的 “工具箱”。我最近用Matplotlib绘制了一些数据 从一个数据库,它完成了工作,而不需要所有的 MATLAB的花里胡哨。但是,它可能不合适 在每种情况下比较Python和MATLAB。和。一样 其他一切决定取决于你需要做什么。
我在本科中使用MATLAB进行控制系统设计和 模拟以及研究生院的图像处理。对于 这些字段由于MATLAB最有意义 强大的控制和图像处理工具箱。像大家一样 提到,数组操作,在每个MATLAB中使用 您需要编写的脚本,使用MATLAB非常容易。
MATLAB的另一个好处是它非常简单 快速做原型设计和尝试使用内置的想法 在工具箱功能。例如,它不费力 导入图像并计算它的直方图或做一些简单的事情 处理它。 MATLAB的一个缺点可能就是它 速度因为它的解释性质。但是,如果一个 真的需要速度,而不是他可以选择实施的 用C / C ++等测试逻辑
为了与Python进一步比较,我可以说是MATLAB 为您提供完整的包装,让您无需工作 需要四处寻找外部图书馆和 实施额外的功能。
关于MATLAB的最后一点我没看到 这里的答案是它具有非常强大的视觉效果 建模/模拟环境称为Simulink。它的 使用Simulink更容易设计和模拟更大的系统。
最后,这一切都取决于你需要的问题 解决。如果您的问题域可以使用其中一个 MATLAB的工具箱,您可以访问MATLAB 可以肯定你有合适的工具来解决它。
答案 6 :(得分:10)
其他人提到的MATLAB在矩阵操作方面非常出色,最初是作为用于线性代数的着名BLAS和LAPACK库的扩展而构建的。它与Java等其他语言很好地接口,并且由于其开发和文档化的库而受到工程和科学公司的青睐。根据我对Python和NumPy的了解,虽然它们共享MATLAB的许多基本功能,但它们的库不具备完整的广度和深度。
就个人而言,我使用MATLAB,因为这是我在实习中学到的东西,这就是我在研究生院学到的东西,这就是我在第一份工作中使用的东西。我没有任何反对Python(或任何其他语言)的东西。这也是我用过的东西。
答案 7 :(得分:7)
就个人而言,我倾向于认为Matlab是一个交互式矩阵计算器和绘图工具,具有一些脚本功能,而不是像Python或C这样的完整编程语言。它成功的原因是矩阵的东西和绘图开箱即用,你可以在其中做一些非常具体的事情,几乎没有实际的编程知识。正如您所指出的,该语言非常令人沮丧,因为它可用于更多通用任务,例如最简单的字符串处理。它的语法很古怪,并且它不是为超过100行左右的项目所需的抽象创建的。
我认为人们尝试使用Matlab作为一种严肃的编程语言的原因是大多数工程师(有例外;我的学位是生物医学工程,我喜欢编程)是可怕的程序员而且讨厌编程。他们在大学教Matlab主要用于矩阵数学,他们学习一些基础编程作为学习Matlab的一部分,并且假设Matlab足够好。我想不出任何我认识的人除了Matlab之外谁知道任何语言,但仍然使用Matlab进行除了一些纯数字运算应用程序以外的任何其他语言。
答案 8 :(得分:6)
在大学中使用它的最可能的原因是数学系已经习惯了,理解它,并知道如何将它融入课程中。
答案 9 :(得分:6)
MATLAB是
的绝佳工具您可以非常有效地在数据集上玩,可视化和测试您的想法。它不应被视为用于产品开发的其他软件语言的替代品。我强烈推荐它用于上述任务,虽然价格昂贵 - 免费的替代品如Octave和Python正在迎头赶上。
答案 10 :(得分:6)
我相信你有一个非常好的观点,这是我工作的公司中提出的一个。由于涉及许可成本,公司在应用matlab方面的能力有限。一位开发人员证明Python是一个非常合适的替代品,但由于对那些耳朵的拥有者而言,它落在了无知的耳朵上......
如果价值10,000英镑(??),那就值得了!
我和你在一起。 Python是MatLab的非常好的替代品。
我应该指出,我被告知该公司可能使用5%到10%的MatLabs功能,这是我与原始海报达成协议的基础
答案 11 :(得分:6)
在matplotlib+pylab和NumPy之间我不认为除了@Adam Bellaire建议的文化惯性之外,Matlab和python之间存在很多实际差异。
答案 12 :(得分:5)
似乎是纯惯性。在使用它的地方,每个人都忙于学习IDL或numpy足够详细的切换,并且不想重写好的工作程序。幸运的是,这并不是严格意义上的,但在足够多的地方确实足够Matlab将会存在很长时间。像Fortran一样(在我工作的地方活跃使用!)
答案 13 :(得分:4)
MATLAB是常用库的包装器。 在许多情况下,它仍然存在。当你变得更大 数据集,它有许多额外的优化,包括 检查和特殊套管常见问题(减少到 稀疏矩阵,例如,有用的,和处理 边缘情况。通常,您可以在标准中提交问题 形成一般功能,它将决定最佳 基于您的数据使用的基础算法。对于小 N,所有算法都很快,但MATLAB确定了 最优算法无问题。
这是由讨厌MATLAB的人编写的,并且已经尝试过 由于集成问题而取代它。从你的 问题,你提到获得MATLAB 5并将其用于 课程。在那个级别,你可能想看看 Octave,一个开源实现,具有相同的功能 句法。我猜这是由MATLAB 5级别决定的(我 只玩它)。这应该让你“通过 你的考试“。对于简单的MATLAB功能,它似乎是 关。它缺乏工具箱支持(同样, 主要用于重新调整函数调用表单 熟悉现场工程师并选择正确的 要使用的基础算法。
答案 14 :(得分:4)
MATLAB受大学欢迎的一个原因也是很多大学都很受欢迎的原因:有很多教授熟悉它,并且相当强大。
我已经和很多人谈过,他们对MATLAB的新兴能力特别感兴趣,而不是连续工作。在毕业学校使用过Python,我希望在这种情况下我能够使用MATLAB。它肯定会使矢量空间计算变得轻而易举。
答案 15 :(得分:4)
它在业界有用的主要原因是构建在核心功能之上的插件。过去几年几乎所有活跃的Matlab开发都集中在这些上。
不幸的是,你没有太多机会在学术环境中使用它们。
答案 16 :(得分:4)
我知道这个问题很老,因此可能不再存在 看着,但我觉得有必要发表评论。作为一个 乔治亚理工学院的航空航天工程师,我可以说,没有 问题,MATLAB很棒。你可以快点拥有它 与Excel电子表格接口以获取有关的数据 火箭飞得多高和多快,风如何影响 那些火箭,以及不同的引擎如何重要。外 火箭,类似的概念发挥作用的汽车,卡车, 飞机,宇宙飞船,甚至田径运动。你可以拉 大量数据,操纵所有数据,并确保 你的结果是应该的。如果有的话 off,您可以在调试时发生错误的换行符 您的程序,而无需每次都需要重新编译 运行你的程序。它比其他一些程序慢吗? 嗯,技术上。我确定你是否想要这个号码 在NVIDIA图形处理器上运行它非常棒 可能会更快,但它需要更多的努力 更难调试。
作为通用编程语言,MATLAB很弱。不是 意在与Python,Java,ActionScript,C / C ++或 任何其他通用语言。这是为了 名称所暗示的工程和数学利基,以及它 这样做很棒。
答案 17 :(得分:3)
自从我使用Matlab以来已经有一段时间了,但是从内存中它确实提供了(尽管有额外的插件)生成源的能力,以便您在DSP上实现算法。
由于python是一种通用编程语言,因此没有理由不能在python中完成所有可以在matlab中完成的工作。但是,matlab确实提供了许多其他工具 - 例如。一系列广泛的dsp功能,广泛的S和Z域功能。
所有这些都可以用python手工编码(因为它是一种通用语言),但是如果您只是想要结果,那么在Matlab上花钱是更便宜的选择吗?
这些功能也已针对性能进行了调整。例如。 Numpy的文档指定其傅立叶变换针对2点数据集的功率进行了优化。据我所知,Matlab已被编写为使用最有效的傅里叶变换来适应数据集的大小,而不仅仅是2的幂。
编辑:哦,在Matlab中,您可以非常轻松地制作一些耸人听闻的看图,这在您展示数据时非常重要。同样,使用其他工具肯定不是不可能。
答案 18 :(得分:3)
当你注意到Matlab“很难处理矩阵和绘制事物”时,我认为你回答了自己的问题。任何需要大量矩阵数学和可视化的应用程序在Matlab中可能都是最容易做到的。
也就是说,Matlab的语法感觉很尴尬并且显示了语言的年龄。相比之下,Python是一种更好的通用编程语言,使用正确的库可以完成Matlab所做的大部分工作。但是,对于矢量和矩阵操作,Matlab总是会有比Python更简洁的语法。
如果您的大部分编程涉及这些类型的操作,例如信号处理和一些统计技术,那么Matlab将是更好的选择。
答案 19 :(得分:2)
First Mover Advantage。 Matlab自20世纪70年代末以来一直存在。 Python最近出现了,并且使它适合于Matlab类型任务的库最近也出现了。人们习惯使用Matlab,所以他们使用它。
答案 20 :(得分:2)
Matlab擅长数字运算。矩阵和矩阵操作。它有许多有用的内置库(取决于什么版本)我认为如果你要计算方程式它比python更容易使用。