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
其中 CVV
和 CCC
是两个包含单元格的相等矩阵,我必须将该计算应用于每个单元格。
问题是,在这个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 循环,以便根据索引 c
和 r
扫描每个元素,如下所示:
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)
其中 x
和 y
是(分别)CVV
和 CCC
中的单个单元格。
我有这行代码:
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
其中 CVV
和 CCC
是两个包含单元格的相等矩阵,我必须将该计算应用于每个单元格。
问题是,在这个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 循环,以便根据索引 c
和 r
扫描每个元素,如下所示:
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)
其中 x
和 y
是(分别)CVV
和 CCC
中的单个单元格。