MATLAB: How to match elements of matrix having different dimensions

dimensionselementsfind commandfor loopisequalismembermatrix

if true
% code
endI have some dates in say variable A as 10x6 double form :
2000 01 01 00 00 01
2000 01 01 00 00 02
2000 01 01 00 00 03
...
...
...
2000 01 01 00 00 09
2000 01 01 00 00 10
Now another matrix B as 5×6 double form :
2000 01 01 00 00 01
2000 01 01 00 00 02
2000 01 01 00 00 03
2000 01 01 00 00 09
2000 01 01 00 00 10
Now i would like to find the row index of A where elements of B are found. i.e. answer = row index: 1,2,3,9,10.
I tried
idx = ismember(A, B,'rows'); % it does not work!
so i tried,
idx = ismember(B, A,'rows'); % which also does not work!
So i used conventional hour-taking method:
% tic
% idx = nan(length(A),1);
% for i = 1:A
% for j = 1:B
% if isequal(A(i,:), B(j,:))
% idx(i,1) = j;
% end

% end
% end
% toc
Any short-cut to solve this…?

Best Answer

find the row index of A where elements of B are found
ismember is indeed the function for that, so you will have to explain why it does not work. In this particular case:
isinB = ismember(A, B, 'rows');
Note that I've changed the name of the return variable to something more accurate than idx since the first output of ismember is not indices but a logical vector indicating whether the corresponding row of A is found in B. If you do want indices:
idx = find(isinB);
However, more often than not, it is easier to work with the logical vector and find is just a waste of time.