# Rapid Vector Matching/Search Problem

1 view (last 30 days)

Show older comments

Kyle Johnston
on 20 Aug 2014

Commented: Oleg Komarov
on 23 Aug 2014

I have a matrix (we'll call A) of size m x n, and a vector (we'll call B) that is a 1 x n, and I am interested in finding the one unique index (and I know there is just one) where A(index,:) equals B, is there a way for me to quickly make the determination in MATLAB besides using the following code:

for i = 1 : m

if ((isequal(A(i,:), B)))

indexIntrest = i;

break;

end

end

Thanks

### Accepted Answer

Joseph Cheng
on 20 Aug 2014

Edited: Joseph Cheng
on 20 Aug 2014

you'll need to use the function ismember()

such as:

found_row = ismember(A,B,'rows')

which will return a logical array where a 1 will represent a match. then by doing something like this

A= randi(2,100,4);

indexIntrest=find(ismember(A,[ 2 1 1 1],'rows'))

will return the indexes that match.

##### 3 Comments

Joseph Cheng
on 21 Aug 2014

Joseph Cheng
on 21 Aug 2014

Alright finally grasped how the perms() function lays out the permutations. Needed to eat a cookie and it came to me.

clc

clear all

n=10;

A= perms(1:n);

B=A(randi(length(A),1),:);

space = factorial(n-1);

tic

for i = (space*(n- B(1)) + 1) : space*(n- B(1) + 1)

if (isequal(A(i,:),B))

index3 = i

break;

end

end

looptime = toc;

index4 = 1;

tic

seq = [n:-1:1];

for i =1:n-1

space=factorial(n-i);

Subind = find(seq==B(i)); %determine which section

index4= index4+space*(Subind-1);

seq = A(index4,i+1:end); %contains order of next column

end

calctime = toc;

disp([A(index4,:);B])

disp(['loop time: ' num2str(looptime)])

disp(['calc time: ' num2str(calctime)])

disp(['loop - calc: ' num2str(looptime-calctime)])

### More Answers (1)

Oleg Komarov
on 21 Aug 2014

find(all(bsxfun(@eq, A,B),2))

What happens is every row of A is tested with @eq for element-wise equality against B, producing a m x n logical matrix. Then, all() tests each row if all elements are true, and find() returns the position.

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!