我有一个长度为3的单元格数组,我希望用另一个长度为for
的单元格数组进行6
循环,那么如何按顺序为第一个数组添加额外的3个单元格使2个单元格数组相等并在MATLAB中使用我的for
循环?
例如,有2个输入:
type = { '12' '62' '5' };
colour = {'re' 'green' 'yellow' 'brown' 'blue' 'black'};
for i = 1:length(colour)
if isequal(colour(i), type(:))
result(i) = type(i);
else
end
end
我需要使用type
单元格数组生成具有相同大小的colour
单元格数组(我想我必须在type
单元格数组的一侧添加额外的3个空单元格)。
答案 0 :(得分:2)
我必须先解决代码中的几个问题:
如果使用单元格数组,则必须使用花括号({}
)从中提取元素。您应该撰写colour(i)
。
colour{i}
这不是问题,但这是一个很好的做法。如果您不需要处理else
语句的if
部分,请不要写它。
预分配内存,以便数组不会在循环内生长(它会降低程序的速度)。具体而言,在result = cell(size(colour));
循环之前添加行for
。
您的isequal
逻辑存在缺陷。实际上,它始终会返回false
,因为colour{1}
是一个元素而type{:}
很多。
根据您的示例,types
包含数字和colours
个字母,尽管它们都是字符串。比较两者是否有意义?
现在,关于您的问题,由您来决定for
循环的运行方式。既然你没有提到你想要达到的目标(你宁愿问你想要如何实现某些东西而又没有说明究竟是什么),我不能说你的for
循环应该是什么样的,如果有必要的话。也许您打算使用ismember
代替isequal
?如果是这样,固定代码可能如下所示:
result = cell(size(colour));
for i = 1:length(colour)
if ismember(colour{i}, type)
result{i} = type{i};
end
end
或更短,如下:
result = cell(size(colour));
[found, idx] = ismember(colour, type);
result(found) = type{idx(found)}
如果您提供更多详细信息,也许我可以优化我的答案,以便它可以为您提供更多帮助。