2013-07-28 3 views
-5

Внизу я положил C, A, B, чтобы упростить понимание. У фактического массива ячеек нет такого типа заголовков.Найти и заменить с помощью Matlab

У меня есть матрица [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 

и матрица [2 3; 2 10; 2 27; 1 10; 1 6; 1 6; 2 10], который будет выглядеть

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

Я хочу, чтобы получить путем поиска и замены с использованием 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 

Если столбец C из первого массива ячейки и столбца С 2 матрицы были одинаковыми, это проблема будет очень простой.

Но факт, что они разные, делает это трудным для меня.

Я мог бы сделать это используя для и если. Например, если столбец C второй матрицы равен 3, он будет заменен на 7 2 9 34.

Но это было очень медленно. Поэтому мне нужен был более быстрый код.

Сначала я думал об уникальном, но не мог понять, как привести к желаемому результату.

+0

Необходимо уточнить свой вопрос, и, самое главное, после того, как вы разъяснили его, вы должны сообщить нам, что вы пробовали. – CTZStef

+0

Выход не имеет смысла – P0W

+0

@CTZStef OK Я сделаю это прямо сейчас. – user1849133

ответ

1

Если mat1 и mat2 - это первая и вторая матрицы, которые вы описали, это должно сделать необходимое вам соединение с функциями индексирования.

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

Спасибо. И, возможно, вторым «матом» должно быть «mat1», верно? :) Может быть, опечатка? – user1849133

Смежные вопросы