2013-07-28 3 views
-5

Dans le tableau ci-dessous, j'ai mis C, A, B juste pour le rendre facile à comprendre. Le tableau de cellules réel n'a pas ce type d'en-têtes.Rechercher et remplacer à l'aide de Matlab

J'ai une matrice [3 7 2 9 34; 10 9 7 34 NaN; 27 2 9 NaN NaN; 6 7 3 26 NaN]

C A B 
------------------- 
3 7 2 9 34 
10 9 7 34 NaN 
27 2 9 NaN NaN 
6 7 3 26 NaN 

et une matrice [2 3; 2 10; 2 27; 1 10; 1 6; 1 6; 2 10] qui ressemblera

D C 
------ 
2 3 
2 10 
2 27 
1 10 
1 6 
1 6 
2 10 

Je veux en trouvant et en remplaçant Matlab

D A B 
----------- 
2 7 2 9 34 
2 9 7 34 
2 2 9 
1 9 7 34 
1 7 3 26 
1 7 3 26 
2 9 7 34 

Si la colonne C du 1er réseau de cellules et de la colonne C du 2 matrice étaient les mêmes, ce le problème sera très facile. Mais le fait qu'ils soient différents rend cela difficile pour moi.

Je pourrais le faire en utilisant pour et si. Par exemple, si la colonne C de la deuxième matrice est 3, elle sera remplacée par 7 2 9 34.

Mais c'était très lent. J'ai donc besoin d'un code plus rapide. Au début, je pensais unique, mais je ne pouvais pas trouver comment obtenir le résultat souhaité.

+0

Vous devez clarifier votre question, et le plus important, une fois que vous l'avez clarifié, vous devrez nous dire ce que vous avez essayé. – CTZStef

+0

La sortie n'a pas de sens – P0W

+0

@CTZStef OK Je le ferai tout de suite. – user1849133

Répondre

1

Si mat1 et mat2 sont les première et seconde matrices que vous avez décrites, vous devez effectuer la jointure dont vous avez besoin avec les fonctions d'indexation.

[~, I] = ismember(mat2(:, 2), mat1(:, 1)); 
Output = [mat2(:, 1) mat1(I, 2:end)] 
+0

Merci. Et peut-être que le second "mat" devrait être "mat1", n'est-ce pas? :) Peut-être une faute de frappe? – user1849133