【问题标题】:Maximizing the efficiency of a simple algorithm in MATLAB在 MATLAB 中最大化简单算法的效率
【发布时间】:2014-07-14 22:14:06
【问题描述】:

这就是我想要在 MATLAB 中做的事情:

我有一个包含 n 个二维图像的数组。我需要逐个像素地遍历,并找到哪张图片在每个点处具有最亮的像素,然后将该图像的索引存储在该点的另一个数组中。

如果我有三张图片 (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

【问题讨论】:

    标签: performance algorithm matlab nested-loops


    【解决方案1】:

    您可以将max(...) 与指定的维度一起使用以获得沿第三维度的最大值。

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

    【讨论】:

      【解决方案2】:

      您可以通过这种方式获得最大值矩阵,使用内存而不是处理器的高性能:

      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 也可以是矩阵。 它返回具有最大值的矩阵和索引矩阵(在该矩阵中找到每个最大值)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多