Find positions of elements in rows of one matrix in rows of another matrix (efficiency question)

1 view (last 30 days)
Hello.
Im trying to process 2 big matrices in the following way:
a = perms(1:9);
b = perms(1:9);
c = zeros(size(a));
[~,m] = size(a);
tic;
for i = 1:m
c(bsxfun(@eq, a, b(:,i))) = i;
end
toc
Note that a and b are generated with perms just for example purposes.
Can this code be improved to run faster?
Thanks!

Accepted Answer

Matt J
Matt J on 27 Jun 2021
Edited: Matt J on 29 Jun 2021
N=500;
a = randi(N,N);
b = randi(N,N);
c1 = zeros(size(a));
[~,m] = size(a);
tic;
for i = 1:m
c1(bsxfun(@eq, a, b(:,i))) = i;
end
toc
Elapsed time is 0.399945 seconds.
tic;
map=reshape(fliplr(b),[],1,m)==a;
[map,c]=max(map,[],3);
c=(m+1-c).*map;
toc
Elapsed time is 0.178260 seconds.
isequal(c1,c)
ans = logical
1
  3 Comments

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Products


Release

R2016a

Community Treasure Hunt

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

Start Hunting!