在N dim数组上优化MATLAB工作(512,512,400)

时间:2015-03-27 15:33:56

标签: performance matlab for-loop optimization matrix

我正在处理512x512像素的图像;我编写了一个代码来分析我的图像,并使用预分配,在10分钟内或多或少的矩阵中给出了我需要的维度值(512,512,400)。

我的问题是当我想使用这个矩阵时:我需要花费数小时才能看到结果,并且我希望在更短的时间内实现一些能够实现我想要的脚本。你能救我吗?

% meanm is a matrix (512,512,400) that contains the mean of every inputmatrix
% sigmam is a matrix (512,512,400) that contains the std of every inputmatrix 

% Basically what I want is that for every inputmatrix (512x512), that is stored inside
% an array of dimensions (512,512,400),
% if a value is higher than the meanm + sigmam it has to be changed with 
% the corrispondent value of meanm matrix.

p=400;
for h=1:p
    if (inputmatrix(:,:,h) > meanm(:,:,h) + sigmam(:,:,h))
       inputmatrix(:,:,h) = meanm(:,:,h);
    end
end

我知道MatLab在矩阵计算方面表现更好,但我不知道如何在我的400张图像上更好地转换这个for循环。

1 个答案:

答案 0 :(得分:0)

尝试使用for循环的条件来制作逻辑矩阵

logical_mask = (meanm + sigmam) < inputmatrix;
inputmatrix(logical_mask) = meanm(logical_mask);

这可以通过使用Matlab的两个功能来提高您的性能

  1. Vectorization使用矩阵运算而不是循环。引用链接的网站&#34;矢量化代码的运行速度通常比包含循环的相应代码快得多。&#34;
  2. Logical Indexing允许您同时访问阵列中满足条件的所有元素。