MATLAB有什么好处?为什么大学这么使用它?什么时候比Python好?

2024-04-16 02:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

是什么让它对研究人员和在大学工作的人如此酷? 我觉得用矩阵和绘图很酷。。。(在Python中可以使用一些库轻松完成的事情)。

编写一个函数或解析一个文件是非常痛苦的。我还在开始,我错过了什么?

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


更新1:我最想知道的一件事是“我是否遗漏了什么?”:天

更新2:感谢您的回答。我的问题不是买还是不买MATLAB。学校有可能免费给我一份旧版的MATLAB(我猜是Matlab5),而不违反许可证。我对它的能力很感兴趣,如果它需要更深入的研究(我不需要任何东西,只需要basicMATLAB就可以通过考试:P)在现实世界中,对于特定类型的任务,它确实比Python好。


Tags: andthetopicis世界thisareits
3条回答

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

有一个原因是matlab如此优秀和广泛使用:

非常快的编码

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

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

在研究环境中,我们(希望)经常有新的想法,我们想很快地测试它们,看看是否值得在这个方向上坚持下去。而且大多数情况下,我们编写的代码只有一小部分是有用的。

在执行时,Matlab通常会慢一些,但我们不太在意。因为我们事先不知道什么方法会成功,所以我们必须尝试很多方法,所以我们的瓶颈是编程时间,因为我们的代码通常会运行几次以获得要发布的结果,仅此而已。

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

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

Matlab有很多我需要的函数,所以我不必一直重新设计它们:

将矩阵的索引更改为二维坐标: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,我总是需要google的东西,在论坛或stackoverflow中查找。。。。完成时间消耗。

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

在我的研究中,我已经使用matlab很多年了。它对线性代数很好,并且有大量编写良好的工具箱。最新的版本开始推动它向通用语言(更好的优化器、更好的对象模型、更丰富的作用域规则等)靠拢。

去年夏天,我有一份工作,我用Python+numpy代替了Matlab。我喜欢节奏的变化。它是一种“真正的”语言(以及所有需要的),它有一些很好的数字特性,比如广播数组。我也很喜欢伊普顿的环境。

以下是我对Matlab的一些偏好:

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

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

亚当只是部分正确。很多,即使不是大多数,数学家也永远不会碰它。如果有一个计算机工具在使用,它将是类似于MathematicaMaple的东西。另一方面,工程部门常常依赖于它,对一些应用数学家来说,肯定有一些有用的东西。它在一些地区的工业中也被大量使用。

关于MATLAB,您必须认识到它最初是作为线性代数的Fortran库的包装器。很长一段时间以来,它的态度是“全世界都是一系列的双打(花车)”。作为一门语言,它已经非常有机地发展起来了,如果你把它看作一门编程语言的话,它的一些缺陷是非常根深蒂固的。

然而,如果你把它看作是一个进行某些类型研究的环境,它有一些真正的优势。这和做浮点线性代数差不多。这种表示法简单而强大,实现速度快,值得信赖。它非常擅长生成绘图和其他交互任务。有大量的“工具箱”,其中有适合特定任务的代码,而且价格合理。有很多用户共享数字代码(Python+NumPy在同一个联盟中没有任何东西,至少现在还没有)

Python,warts和all,是一种更好的编程语言(和许多其他语言一样)。不过,就工具而言,已经落后了10年左右。

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

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

严格地看一下Python与MATLAB的比较,它们大多是用于不同工作的不同工具。在它们重叠的区域,很难说什么是更好的路线(很大程度上取决于你想做什么)。但大多数情况下,Python并不擅长于MATLAB的核心功能,反之亦然。

相关问题 更多 >