经常看到一些Matlab初学者写出带有层层循环的代码,这些代码往往运行得很慢,而且非常难懂。Matlab提供了大量的命令来避免循环
建议是:在确定要写一个针对矩阵操作的2重循环之前,请仔细阅读帮助中的Maximizing MATLAB Performance一节。
里面有很多例子,这里举一个我自己碰到的问题:
要统计数字图像的亮度最大值和最小值,由于数字图像可能是一个二维或三维的矩阵,开始我写出了如下的代码:
switch ndims(img)
case 2
m = max(max(img));
case 3
m = max(max(max(img)));
end
后来对这种做法很不满意,如果有一个8维的矩阵,难道我要写
max(max(max(max(max(max(max(max(x))))))))
才行?后来发现无论矩阵是什么维数,实际上
max( x(:) )
就够了。
点评:y = x(:) 这种方式可以返回矩阵的所有元素,形成一个列向量 y,无视x 的维数。注:y 对 x 以列优先的方式排列
级别:★★★
问题:提取一幅RGB图象中的蓝色部分
解答: