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

4 visualizaciones (últimos 30 días)
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!

Respuesta aceptada

Matt J
Matt J el 27 de Jun. de 2021
Editada: Matt J el 29 de Jun. de 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 comentarios

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Productos


Versión

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by