在MATLAB中最大化简单算法的效率

时间:2014-07-14 22:14:06

标签: performance algorithm matlab nested-loops

所以这就是我在MATLAB中尝试做的事情:

我有一组n,2D图像。我需要逐个像素地查看,找到哪个图片在每个点都有最亮的像素,然后将该图像的索引存储在该点的另一个数组中。

如果我有三张图片(n = 1,2,3)而图片2有[1,1]的最亮像素,那么max_pixels [1,1]的值将是2,索引具有最亮像素的图片。

我知道如何使用for循环,

    %not my actual code:
    max_pixels = zeroes(x_max, y_max)
    for i:x_max
      for j:y_max
        [~ , max_pixels(i, j)] = max(pic_arr(i, j))
      end
    end

但我的问题是,使用MATLAB中的一些特殊功能可以更快地完成吗?我听说MATLAB在嵌套循环方面不太友好,并且应该尽可能使用以下功能。有没有办法让这个更有效率?

-PK

2 个答案:

答案 0 :(得分:2)

您可以使用指定维度的max(...)来获得第3维的最大值。

 [max_picture, indexOfMax] = max(pic_arr,[],3)

答案 1 :(得分:1)

您可以使用内存而不是高性能的处理器来获取最大值矩阵:

a = [1 2 3];
b = [3 4 2];
c = [0 4 1];
[max_matrix, index_max] = arrayfun(@(x,y,z) max([x y z]), a,b,c);

a,b,c也可以是矩阵。 它返回具有最大值和索引矩阵的矩阵(其中矩阵找到每个最大值)。