2010-12-14 79 views
2

Je ne trouve pas l'équivalent chaîne de la réponse finale en utilisant les données ci-dessous. S'il vous plaît, je ne peux pas utiliser si/pour les boucles! Une réponse finale est préférée à chaque élément comme un tableau (par exemple le format de MAINDATA)cellule à matrice correspondant/map/cellOperations (MATLAB)

mainData = {'IBM' [201] [1] ; 
      'GE' [403] [1] ; 
      'MSFT' [502] [3] ; 
      'GM' [101] [2]  } ; 

finalAns = [ 101 2 0.5; 403 1 0.6 ]     ; 

%% I tried doing this -> 
temp = cell2mat(mainData(:,[2 3])) ; 

tf = ismember(temp, finalAns(:,[1 2],'rows') ; 
secIDs = mainData(tf) ; 
+0

Que voulez-vous exactement comme sortie? Essayez-vous de sélectionner uniquement les lignes de 'mainData' dont les deuxième et troisième colonnes correspondent aux entrées de' finalAns'? – gnovice

+0

Thnx. Je préfère la réponse comme: 'GM' [101] [2] [0.5]; 'GE' [403] [1] 0,6] – Maddy

+0

OR -> 'GM' [101 2 0,5]; 'GE' [403 1 0.6] – Maddy

Répondre

2

Afin d'obtenir les entrées de chaque rangée de mainData qui correspondent à ceux finalAns (sur la base des deux dernières colonnes de mainData et les deux premières colonnes de finalAns) et de les obtenir dans le même ordre qu'ils apparaissent dans finalAns et la dernière colonne de finalAns jointe, vous pouvez le faire:

>> temp = cell2mat(mainData(:,2:3)); 
>> [isThere,index] = ismember(finalAns(:,1:2),temp,'rows'); 
>> output = [mainData(index(isThere),:) num2cell(finalAns(isThere,3))] 

output = 

    'GM' [101] [2] [0.5000] 
    'GE' [403] [1] [0.6000] 

la sortie est un 2-sous- 4 cellules avec chaque valeur dans une cellule séparée. Si vous voulez que les trois dernières colonnes à recueillir dans un vecteur, vous pouvez remplacer le calcul de output ci-dessus avec ceci:

>> temp = [temp(index(isThere),:) finalAns(isThere,3)]; 
>> output = [mainData(index(isThere),1) num2cell(temp,2)] 

output = 

    'GM' [1x3 double] 
    'GE' [1x3 double] 

Notez que vous avez maintenant un réseau de cellules 2 par 2 où les cellules dans la deuxième La colonne contient 1-by-3 doubles tableaux.

+0

Parfait! J'avais besoin du tableau de cellules 2 * 4 qui peut maintenant être sorti dans un fichier .csv. Merci beaucoup 'gnovice'! – Maddy