对于循环:在单元格内计算

时间:2016-02-10 10:39:55

标签: matlab for-loop cell-array

我有这行代码

clear MUCV
 for c = 1:size(CVV,2)
     r = 1:size(CVV,1);
     MUCV(r,c) = (round(100*median(abs(CVV{c}(CCC{c}>0.8))))/100);
 end

其中CVVCCC是包含单元格的两个相等矩阵,我必须将该计算应用于每个单元格。

问题在于,对于循环这个计算仅针对第一行进行计算,然后在MUCV中复制r多次,如{I} MUCV(r,c) = (round(100*median(abs(CVV{r,c}(CCC{r,c}>0.8))))/100); 中所指定的那样,如果我添加{r和c }

cmake-gui

它给了我错误。

提前感谢您,希望它足以解释问题

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望从CVV{c}中提取与约束CCC{c}>0.8匹配的所有元素。我认为Matlab不会允许你以一步的方式做到这一点,你必须分步完成。

问题在于r。您必须创建一个嵌套的for循环,以便根据索引cr扫描每个元素,如下所示:

for c = 1:size(CVV,2)
    for r = 1:size(CVV,1);
        % do something
    end 
end

但你必须编辑内线,因为我认为它不会起作用。也许尝试像

这样的东西
for c = 1:size(CVV,2)
    for r = 1:size(CVV,1);
        SelectedCVV=CVV{r,c};
        MUCV(r,c) = (round(100*median(abs(SelectedCVV(CCC{r,c}>0.8))))/100);
    end 
end

您也可以使用cellfun()代替嵌套循环来获得相同的结果。此功能允许您对单元阵列中的每个单元执行相同的功能。在你的情况下,你应该添加像

这样的东西
MUCV=cellfun(@(x,y) round(100*median(abs(x(y>0.8))))/100,CVV,CCC)

其中xy是({1}}和CVV中的单个单元格。