规范化单元阵列的长度

时间:2012-10-30 12:09:11

标签: matlab cell-array

我有一个长度为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个空单元格)。

1 个答案:

答案 0 :(得分:2)

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

  1. 如果使用单元格数组,则必须使用花括号({})从中提取元素。您应该撰写colour(i)

  2. ,而不是撰写colour{i}
  3. 这不是问题,但这是一个很好的做法。如果您不需要处理else语句的if部分,请不要写它。

  4. 预分配内存,以便数组不会在循环内生长(它会降低程序的速度)。具体而言,在result = cell(size(colour));循环之前添加行for

  5. 您的isequal逻辑存在缺陷。实际上,它始终会返回false,因为colour{1}是一个元素而type{:}很多。

  6. 根据您的示例,types包含数字和colours个字母,尽管它们都是字符串。比较两者是否有意义?

  7. 现在,关于您的问题,由您来决定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)}
    

    如果您提供更多详细信息,也许我可以优化我的答案,以便它可以为您提供更多帮助。