vectorize a for loop

2 visualizaciones (últimos 30 días)
Marko
Marko el 21 de Abr. de 2021
Editada: Marko el 21 de Abr. de 2021
Hello Community,
i need ur help, to speed up a routine.
i have n points in space and i need the distances between all points.
Here is the primitve script: ( n is normally some in the range of 1e5...)
n = 8;
xc = rand(n,1);
yc = rand(n,1);
r = zeros(n);
for i = 1:n
for j=1:n
if i~=j
r(i,j) = sqrt((xc(i)-xc(j))^2 + (yc(i)-yc(j))^2);
end
end
end
I know that the matrix r is symmetic so i need only to compute half of the elements. (This speed up to 50%)
n = 8;
xc = rand(n,1);
yc = rand(n,1);
r = zeros(n);
for i = 1:n
for j=1:n
if and(i~=j,i<j)
r(i,j) = sqrt((xc(i)-xc(j))^2 + (yc(i)-yc(j))^2);
end
end
end
toc
r = (r+r');
But it is possible to vectorize the whole routine?
Maybe with permute and a adjoint matrix which could be vectorised A(:) = ....
Thank you in Advance!
  2 comentarios
Matt J
Matt J el 21 de Abr. de 2021
Editada: Matt J el 21 de Abr. de 2021
( n is normally some in the range of 1e5...)
That sounds like a non-starter. The result would consume 37 GB in single floats. Even if you had this much free RAM, I suspect computing the matrix is not the most efficient approach for your application.It just doesn't sound like a reasonable thing to have to do.
Marko
Marko el 21 de Abr. de 2021
Hello Matt,
sorry there is a mistake n should be in the order of 1e3!
I am writing a panel method, and estimatet the max. number of n-panels for an multi element airfoil.
So the Ram should not be the limiting factor.

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 21 de Abr. de 2021
Editada: Matt J el 21 de Abr. de 2021
This should be pretty well optimized already,
r=pdist([xc,yc]);
  4 comentarios
Matt J
Matt J el 21 de Abr. de 2021
Faster:
r=(xc-xc').^2 + (yc-yc').^2;
Marko
Marko el 21 de Abr. de 2021
Editada: Marko el 21 de Abr. de 2021
perfect, thank you Matt!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Communications Toolbox en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by