2015-05-07 2 views
0

У меня есть 2 ячейки матриц строк, которые я хочу сравнить и сортировать в одном. Например:Matlab: Сортировка двухэлементных матриц строк

Data1={'hello','daddy','mama';'0','55','60';'asd','','dwadsdwa'}; 

Data2={'cat','daddy','dog','cat','mama','daddy';'21','54','79','1','0','231';'sa','wda','thjd','gf','wda','sda'}; 

Я хочу, чтобы сравнить первую строку матрицы и создать новый результат в виде матрицы с элементами согласования и их столбцов. Как:

matches={'daddy','daddy','daddy','mama','mama';'55','54','231','60','0';'','wda','sda','dwadsdwa','wda'}; 

Я попытался с:

Da1Index=find(ismember(Data1(1,:),Data2(1,:))); 
Firstmatches=Data1(:,Da1Index); 

Da2Index=find(ismember(Data2(1,:),Data1(1,:))); 
Secondmatches=Data2(:,Da2Index); 

Так что я хотел бы получить элементы соответствия и их столбцы в 2-х других матриц Cell. Теперь я мог искать каждый элемент-имя Firstmatches в массиве ячеек Secondmatches, но мне интересно, есть ли лучший способ? Также я не знаю, как добавить столбцы в правильные позиции.

Возможно, есть более простой способ сделать это? Я надеюсь, что это ясно, чего я хочу достичь!

ответ

0

Вы можете сделать это следующим образом:

i1 = ismember(Data1(1,:), Data2(1,:)); %// columns of Data1 to keep 
i2 = ismember(Data2(1,:), Data1(1,:)); %// columns of Data1 to keep 
matches = [Data1(:,i1) Data2(:,i2)]; %// build result 
matches = sortrows(matches.').';  %// sort if needed. Note: lexicographical order 
+0

Большое спасибо, это работает отлично. Но можете ли вы объяснить сортировки (совпадения. ').'; выражение? что .').' делать? – deSteini

+0

'.'' транспонировать. 'sortrows' сортирует строки массива, но вы хотите отсортировать столбцы. Таким образом, вы транспонируете, сортируете строки, а затем переносите назад –