2012-10-30 97 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)} 

如果你提供更多的細節,也許我可以改進我的回答,以便它可以幫助你更多。