【问题标题】:Avoiding for loop with cells and matrixes involved避免涉及单元和矩阵的 for 循环
【发布时间】:2017-01-29 16:03:29
【问题描述】:

我试图避免 for 循环,并且我一直在阅读所有关于它的旧帖子,但我无法解决我的问题。我是 MATLAB 新手,请原谅我的无知。

问题是我有一个 300x2 的单元格,每个单元格都有一个 128x128x256 的矩阵。每一个都是一个 128x128 像素和每像素 256 个通道的图像。在 300x2 单元格的第一列中,我有我的平行强度值,而在第二列中,我有我的垂直强度值。

我想要做的是获取每个图像的每个像素(对于每个组件)并逐个通道对强度值求和。

我的代码如下:

Image_par_channels=zeros(128,128,256);
Image_per_channels=zeros(128,128,256);
Image_tot_channels=zeros(128,128,256);
for a=1:128
    for b=1:128
        for j=1:256
            for i=1:numfiles
                Image_par_channels(a,b,j)=Image_par_channels(a,b,j)+Image_cell_par_per{i,1}(a,b,j);
                Image_per_channels(a,b,j)=Image_per_channels(a,b,j)+Image_cell_par_per{i,2}(a,b,j);
            end
            Image_tot_channels(a,b,j)=Image_par_channels(a,b,j)+2*G*Image_per_channels(a,b,j);
        end
    end
end

我想我可以加快引入 (:,:,j) 而不是指定 a 和 b。但仍然是一个 for 循环。由于缺乏专业知识,我试图使用 cellfun 没有任何成功。你能帮我一把吗?

我真的很感激。

非常感谢,祝您有愉快的一天! 是的

【问题讨论】:

    标签: matlab loops for-loop matrix cell


    【解决方案1】:

    我相信你可以做类似的事情

    Image_par_channels=zeros(128,128,256);
    Image_per_channels=zeros(128,128,256);
    Image_tot_channels=zeros(128,128,256);
    
    for i=1:numfiles
         Image_par_channels = Image_par_channels + Image_cell_par_per{i,1};
         Image_per_channels = Image_per_channels + Image_cell_par_per{i,2};
    end
    
    Image_tot_channels = Image_par_channels + 2*G*Image_per_channels;
    

    我很久没有使用 matlab 了,但我似乎记得你可以做这样的事情。 g 是一个常数。

    编辑: 删除了+=。增量赋值不是 matlab 中可用的运算符。您还应该注意Image_tot_channels 可以直接在循环中构建,如果您以后不需要其他两个变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多