ismember(A,B,'rows') indexing
    9 views (last 30 days)
  
       Show older comments
    
    Waqar Ali Memon
      
 on 11 Jul 2019
  
    
    
    
    
    Commented: Waqar Ali Memon
      
 on 14 Jul 2019
            Hello everyone,
I would like to compare two cells, want to see if element of A is a member of B, If yes then it should return 1 otherwise 0.
Size of A is 189x1 and Size of B is 108x1.
I used: 
C = ismember(A,B,'rows');
It returned logical o,1. With Size of 189x1, Perfect. 
But now. I want Values of B (108x1) sorted same like C with Size 189x1.
Any help would be appreciated.
Thank you.
Regard,s
Waqar Ali
4 Comments
  dpb
      
      
 on 11 Jul 2019
				Well, that's easy enough -- add 81 elements on the end.  The question is, what are the new elements to contain?  I don't see there's any correlation between the two requests.
Accepted Answer
  Stephen23
      
      
 on 11 Jul 2019
        
      Edited: Stephen23
      
      
 on 11 Jul 2019
  
      >> one = {'ADSµSOIC8';'AVX0603';'ELN';'ELNH10';'EPC';'EPC0603';'FAGDO214AA';'FAGDO214AA (SMB)';'FAGDO214AB';'FAGDO214AC';'FAGSMA';'FAGSOD123W';'FAGSOD128';'FSLLQFP-64 ePAD';'FSLLQFP80-ePad'}
one = 
    'ADSµSOIC8'
    'AVX0603'
    'ELN'
    'ELNH10'
    'EPC'
    'EPC0603'
    'FAGDO214AA'
    'FAGDO214AA (SMB)'
    'FAGDO214AB'
    'FAGDO214AC'
    'FAGSMA'
    'FAGSOD123W'
    'FAGSOD128'
    'FSLLQFP-64 ePAD'
    'FSLLQFP80-ePad'
>> two = {'ADSµSOIC8','1';'AVX0603','3';'ELN','2';'EPC','2';'EPC0603','3';'FAGDO214AA','10';'FAGDO214AC','1';'FAGSOD123W','5';'FAGSOD128','2';'FSLLQFP-64 ePAD','1'}
two = 
    'ADSµSOIC8'          '1' 
    'AVX0603'            '3' 
    'ELN'                '2' 
    'EPC'                '2' 
    'EPC0603'            '3' 
    'FAGDO214AA'         '10'
    'FAGDO214AC'         '1' 
    'FAGSOD123W'         '5' 
    'FAGSOD128'          '2' 
    'FSLLQFP-64 ePAD'    '1' 
>> [X,Y] = ismember(one,two);
>> out = one;
>> out(:,2) = {'0'};
>> out(X,2) = two(Y(X),2)
out = 
    'ADSµSOIC8'           '1' 
    'AVX0603'             '3' 
    'ELN'                 '2' 
    'ELNH10'              '0' 
    'EPC'                 '2' 
    'EPC0603'             '3' 
    'FAGDO214AA'          '10'
    'FAGDO214AA (SMB)'    '0' 
    'FAGDO214AB'          '0' 
    'FAGDO214AC'          '1' 
    'FAGSMA'              '0' 
    'FAGSOD123W'          '5' 
    'FAGSOD128'           '2' 
    'FSLLQFP-64 ePAD'     '1' 
    'FSLLQFP80-ePad'      '0' 
4 Comments
  Guillaume
      
      
 on 11 Jul 2019
				
      Edited: Guillaume
      
      
 on 11 Jul 2019
  
			One must wonder why an answer is accepted to then say it doesn't work.
As I've pointed out in my answer, you haven't given us enough details to know what you're doing exactly, so it's likely that no answer will work straight out of the box, but you should be able to work it out from there. 
As said, you need to use the 2nd return value of ismember.
I'd recommend you not use X and Y as variable names but soemthing more meaningful
More Answers (2)
  joe
 on 11 Jul 2019
        function result = compareMatrices( A,B)
    result = zeros(size(A,1),size(B,2)); % generate matrix with the same size as the A
    for i=1:numel(A) % this loop checkes the existens of all elements of A in B 
        [~,index]=ismember(A{i,1},B); 
        if index~=0   % if any element of A exists in B
            result{i,1} = 1;   % set 1 in the same position where the existens detected
        end
    end
end
5 Comments
  joe
 on 11 Jul 2019
				if you have matrices with elements of deferent types
try to call the function like this: compareMatrices(string(A), string(B))
  Guillaume
      
      
 on 11 Jul 2019
        If the two cell arrays don't have the same number of columns, you're obviously not using ismember(A, B, 'rows') but something slightly more complex. I'm taking a guess here.
You also haven't said what needs to go in the result, when the row of A is not found in B. 
In any case, you just have to use the 2nd output of ismember
[isfound, where] = ismember(A(:, 1), B(:, 1));  %compare column 1 of A and column 1 of B
C = [A(isfound), B(where(isfound), 3)];  %get rows of A found in B together with the matching value of column 3 of B
Adapt as necessary.
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



