For循环:单元格内计算

For cycle: calculation inside cells

我有这行代码:

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 是两个包含单元格的相等矩阵,我必须将该计算应用于每个单元格。

问题是,在这个for循环中,只对第一行进行计算,然后在MUCV中多次复制指定的同一行在 r.

如果我在下面添加 {r and c} 它会给我一个错误。

MUCV(r,c) = (round(100*median(abs(CVV{r,c}(CCC{r,c}>0.8))))/100);

如果我没理解错的话,你想从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 是(分别)CVVCCC 中的单个单元格。