Find common elements between two vectors and extract data from matrix (vectorized)
    23 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
Hello,
I understand this is different question than the one answered in 
I need to find elements of one small vector into a big vector, and based on that generate a new vector (same size as big vector) using elements of a matrix.
%A is 4x1
A =[1, 6, 5']  %%elements are different 
%B is much larger, 6x1
B =[5 5 1 1 1  6 ]'
%A2 is 
A2=[101, 501, 601;
102, 502, 602;
103, 503, 603]
% BBB is same dim as B, but using elements from A2
%ANSWER SHOULD BE:
BBB=[501 502 101 102 103 601]'
Using
[~,X]=ismember(B,A) %[~, ~, Xb]=unique(B) brings same result
Does not bring the correct location of columns in A2. Using
A=sort(A) 
[~,X]=ismember(B,A)
does bring the correct location of columns in A2.
But how do I extract the rows?
8 Kommentare
  Guillaume
      
      
 am 4 Feb. 2019
				Why isn't it
BBB = [601   %first element of B is 5, which is 3rd element of A, hence element (3, 1) of A2
       602   %5 -> (3, 2)
       101   %1 -> (2, 1)
       102   %1 -> (2, 2)
       103   %1 -> (2, 3)
       501   %6 , 2nd element of A, hence (2, 1
       ]
Akzeptierte Antwort
  Andrei Bobrov
      
      
 am 4 Feb. 2019
        
      Bearbeitet: Andrei Bobrov
      
      
 am 4 Feb. 2019
  
      A3 = fix(A2.*(10.^-floor(log10(A2))));
[ii,~] = find(squeeze(all(A3==reshape(B,1,1,[]))));
[~,~,c] = unique(ii,'stable');
jj = cell2mat(arrayfun(@(x)(1:x)',accumarray(c,1),'un',0));
out = A2(sub2ind(size(A2),jj,ii));
4 Kommentare
  Andrei Bobrov
      
      
 am 4 Feb. 2019
				Yes, if  B =[2 2 1 1 1 3]';
solution: 
[~,~,c] = unique(B,'stable');
jj = cell2mat(arrayfun(@(x)(1:x)',accumarray(c,1),'un',0));
out = A2(sub2ind(size(A2),jj,B));
Weitere Antworten (2)
Siehe auch
Kategorien
				Mehr zu Logical finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


