大多数答案都没有抓住要点。
有一个原因是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)
在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:它的价格