我有以下重复代码(if语句):
aaa = cell(3, 1);
aaa = {rand(20, 1); rand(20, 1); rand(20, 1)};
bbb = cell(3, 1);
for ii=1:20
if (aaa{1,1}(ii, 1) <= 0.5)
bbb{1,1}(ii, 1:3) = [0 1 0];
else
bbb{1,1}(ii, 1:3) = [1 0 0];
end
if (aaa{2,1}(ii, 1) <= 0.5)
bbb{2,1}(ii, 1:3) = [0 1 0];
else
bbb{2,1}(ii, 1:3) = [1 0 0];
end
if (aaa{3,1}(ii, 1) <= 0.5)
bbb{3,1}(ii, 1:3) = [0 1 0];
else
bbb{3,1}(ii, 1:3) = [1 0 0];
end
...
end
代码正在运行,但我很想知道如何删除3 if语句以仅用1替换它(也可能删除for循环)。我已经检查了cellfun函数,但是我没有找到如何与每个单元格内的数组进行交互。
答案 0 :(得分:1)
有时,稍微长一点的代码(比如你的代码)更容易阅读,最终更容易调试。也就是说,这是一个没有任何明确的for或if语句的解决方案。有些人可能会认为这是隐含的。
ccc = cell(3,1);
tempmat = [ones(20, 1) zeros(20, 2)]; %This initializes the else part of your ifs
ccc = {tempmat; tempmat; tempmat};
ind1 = find(aaa{1,1} < 0.5); %Finds all the cases when aaa is less than 0.5
ind2 = find(aaa{2,1} < 0.5);
ind3 = find(aaa{3,1} < 0.5);
ccc{1,1}(ind1,:) = repmat([0 1 0], length(ind1), 1);
ccc{2,1}(ind2,:) = repmat([0 1 0], length(ind2), 1);
ccc{3,1}(ind3,:) = repmat([0 1 0], length(ind3), 1);