大多数答案都没有抓住重点。
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 的地方:它的价格