2014-05-01 107 views
0

我也許會討論這個錯誤,但我有數據{1},數據{2} ...數據{i}。在每個中,我有.type1,.type2 .... .typeN。數組長度不同,所以水平連接不起作用。連接不同大小的1D矩陣

爲了簡單起見

>> data{1}.type1 

ans = 

    1 
    2 
    3 


>> data{2}.type1 

ans = 

    2 
    4 
    5 
    6 

結果應該是[1; 2; 3; 2; 4; 5; 6]

我一直在試圖循環,但不知道如何?我將有可變數量的文件(a,b ..)。我如何去循環和連接?最後,我需要這一切的1×N個陣列..

我的工作代碼,thanks..figured出來..

for i = 1:Types 
    currentType = nTypes{i} 
    allData.(currentType)=[]; 
    for j = 1:nData 
    allData.(currentType) = [allData.(currentType); data{j}.(currentType)(:,3)]; %3rd column 
    end 
end 
+1

'[a; b]'。或者'vertcat(a,b)'。或'c = {a,b}; vertcat(c {:})' –

+0

這不是「離題」來解釋你的輸入數據。根據您的意見,看起來您的示例代碼太簡單了,無法解釋您的實際問題。嘗試一些示例代碼,使其更接近您需要的內容。 – Peter

回答

0

cat,第一個參數是維。在您簡單的例子,那就是:

result = cat(1,a,b); 

即相當於:

result = [a;b]; 

或者你可以將它們連接起來作爲行向量和轉回到一個列向量:

result = [a',b']'; 

對於單元陣列內部結構的情況,我認爲不會有任何繞過循環的方法。假設您有一個單元陣列,其中包含M元素和N「類型」作爲每個元素的結構字段。你可以這樣做:

M=length(data); 
newData=struct; 
for i=1:M 
    for j=1:N 
     field=sprintf('type%d',j); % //field name 
     if (M==1), newData.(field)=[]; end % //if this is a new field, create it 
     newData.(field)=[newData.(field);data{i}.(field)]; 
    end 
end 
+0

是的,但如果我有N個要連接的東西呢? – codefail

+0

假定它們是在單元陣列作爲你上面所建議的,'結果= vertcat(數據{:})'或'結果=貓(1,數據{:})' – Raab70

+0

我需要連接數據{1} .type1和數據{2} .type1 ...類型2,類型3 ...相同N – codefail