2016-08-10 2 views
-4

У меня есть два массива, как показано ниже.специальная сортировка двух массивов в matlab со сравнением

BLoc1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I', 'K', 'L', 'M'] 
BLoc2 = ['A', 'D', 'E', 'F', 'G', 'I', 'J', 'K', 'L'] 

и я хочу, как показано ниже.

BLoc1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I', 'NA', 'K', 'L', 'M'] 
BLoc2 = ['A', 'NA', 'NA', 'D', 'E', 'F', 'G', 'I', 'J', 'K', 'L','NA'] 
+0

Так что вы хотите написать ' 'NA'' если буква алфавита не хватает? Какой язык алфавит? Также, как долго? Алфавит не заканчивается на 'M'. Почему только М? –

+0

Можете вы объяснить, что вы пытаетесь сделать? Что вы пробовали? – goto

+0

Также обратите внимание, что 'BLoc2 = ['A', 'D']' будет 'AD', поэтому' BLoc2 (2) 'будет' D', но если 'BLoc2 = ['NA', 'D'] 'then' BLoc2 (2) = A' –

ответ

1

В результате вы пытаетесь достичь, это возможно только с сотовыми массивов, так как в противном случае 'NA' будет считаться 'N' 'A' т.е. обоих алфавитов в разных индексов.

Во всяком случае, после код, который поможет вам решить: -

BLoc1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I', 'K', 'L', 'M']; 
BLoc2 = ['A', 'D', 'E', 'F', 'G', 'I', 'J', 'K', 'L']; 

%Converting to cell arrays 
BLoc1=num2cell(BLoc1,size(BLoc1,2)); 
BLoc2=num2cell(BLoc2,size(BLoc2,2)); 

%Union of the two 
complete=union(BLoc1,BLoc2); 

NewBLoc1=complete; 
[~,idx]=ismember(complete,BLoc1); 
idx = find(idx==0);   %finding the indexes where BLoc1 has missing elements 
[NewBLoc1{idx}]=deal('NA') %filling the elements at missing indexes with 'Na' 

%Similarly for BLoc2 
NewBLoc2=complete; 
[~,idx]=ismember(complete,BLoc2); 
idx = find(idx==0); 
[NewBLoc2{idx}]=deal('NA') 

%converting back to simple matrix since that's your requirement in the question 
%but I recommend you to also run the code atleast once without the next two lines too. 
NewBLoc1= cell2mat(NewBLoc1) 
NewBLoc2= cell2mat(NewBLoc2) 
+0

Большое спасибо ... Это именно то, что я хочу ... – dmvachhani

-1

Проверьте это:

clc 
clear 

A = [{'a'} {'c'} {'d'} {'w'} {'e'} {'t'}]; 
B = [{'e'} {'b'} {'e'} {'d'} {'z'} {'s'} {'x'}]; 

A = sort(A); 
B = sort(B); 

i = 1; 
while ~(i > length(A) || i > length(B)) 
    if isequal(A(i), B(i)) || isequal(A{i}, 'NA') || isequal(B{i}, 'NA') 
     i = i + 1; 
     continue; 
    end 

    if A{i} > B{i} 
     A = [A(1:i-1) {'NA'} A(i:end)]; 
    else 
     B = [B(1:i-1) {'NA'} B(i:end)]; 
    end 
end 

n = length(A) - length(B); 
A = [A repmat({'NA'}, [1, -n])]; 
B = [B repmat({'NA'}, [1, n])]; 

disp(A) 
disp(B) 
Смежные вопросы