2012-10-30 92 views
0

我有长度为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单元阵列(我想我必须添加额外的3个空单元格侧的type细胞数组)。

+0

您可以请包括一些代码,您的输入和所需的输出? –

+0

请检查上面编辑的问题... :) – Gloria

+0

我有一个强烈的预感这是一个[XY问题]的经典案例(http://meta.stackexchange.com/questions/66377/what-is-the- XY-问题)。请告诉我们你的最终目标是什么? –

回答

2

我得先解决你的代码的几个问题:

  1. 如果使用电池阵列,则必须使用大括号({})从中提取元素。而不是写colour(i)你应该写colour{i}

  2. 这不是一个问题,但它是很好的做法的问题。如果您不需要处理if声明else一部分,不要把它写在所有。

  3. 预分配内存,使阵列不循环(它会减慢程序)的内部增长。具体而言,for循环之前添加行result = cell(size(colour));

  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)} 

如果你提供更多的细节,也许我可以改进我的回答,以便它可以帮助你更多。