0

我有一个长度为 3 的单元格数组,我想for用另一个长度为 的单元格数组创建一个循环6,那么如何为第一个数组添加额外的 3 个单元格以使 2 个单元格数组相等并使用我的for循环MATLAB?

例如,有 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 个空单元格)。

4

1 回答 1

2

我必须首先解决您的代码中的几个问题:

  1. 如果使用元胞数组,则必须使用花括号 ( {}) 从中提取元素。colour(i)你应该写作而不是写作colour{i}

  2. 这不是问题,而是良好实践的问题。如果你不需要处理语句的else一部分if,就不要写它。

  3. 预先分配内存,这样数组就不会在循环内增长(它会减慢程序的速度)。具体来说, 在循环result = cell(size(colour));之前添加该行。for

  4. 你的isequal逻辑有缺陷。实际上,它总是会返回false,因为它colour{1}是一个元素并且type{:}是多个元素。

  5. 根据您的示例,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)}

如果您提供更多详细信息,也许我可以完善我的答案,以便对您有更多帮助。

于 2012-10-30T14:06:49.750 回答