2014-05-01 14 views
0

Je suis peut-être en train de corriger ce problème, mais j'ai des données {1}, des données {2} ... des données {i}. Dans chacun, j'ai .type1, .type2 .... .typeN. Les tableaux étant de longueurs différentes, la concaténation horizontale ne fonctionne pas.Concaténation de matrices 1D de différentes tailles

Par souci de simplicité

>> data{1}.type1 

ans = 

    1 
    2 
    3 


>> data{2}.type1 

ans = 

    2 
    4 
    5 
    6 

Les résultats devraient être [1, 2, 3, 2, 4, 5, 6]

J'ai essayé de boucler mais ne savez pas comment? Je vais avoir un nombre variable de fichiers (a, b ..). Comment faire pour boucler et concaténer? En fin de compte je besoin d'un tableau 1xN de tout cela ..

Mon code de travail, thanks..figured dehors ..

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]'. Ou 'vertcat (a, b)'. Ou 'c = {a, b}; vertcat (c {:}) ' –

+0

Ce n'est pas" digressing "pour expliquer vos données d'entrée. En fonction de vos commentaires, il semble que votre exemple de code soit trop simple pour expliquer votre problème. Essayez un échantillon de code un peu plus proche de ce dont vous avez besoin. – Peter

Répondre

0

Regardez cat, le premier argument est la dimension. Dans votre exemple simple, il serait:

result = cat(1,a,b); 

ce qui équivaut à:

result = [a;b]; 

Ou vous pouvez les concaténer en tant que vecteurs de ligne et transposer vers un vecteur de colonne:

result = [a',b']'; 

Pour le cas d'une structure à l'intérieur d'un tableau de cellules, je ne pense pas qu'il y aura moyen de contourner la boucle. Disons que vous avez un tableau de cellules avec M éléments et N "types" comme champs de structure pour chaque élément. Vous pourriez faire:

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

oui mais si j'ai un N nombre de choses à concaténer? – codefail

+0

En supposant qu'ils sont dans un tableau de cellules comme vous l'avez suggéré ci-dessus, 'result = vertcat (data {:})' ou 'result = cat (1, data {:})' – Raab70

+0

Je dois concaténer les données {1} .type1 et data {2} .type1 ... même pour type2, type3 ... N – codefail

Questions connexes