Effacer les filtres
Effacer les filtres

Help vectorizing 2 For loops with meshgrid and subscripts

1 vue (au cours des 30 derniers jours)
carlos Uribe
carlos Uribe le 12 Août 2014
Hello,
I have been thinking on vectorizing this code:
mat=zeros(a^2,a^2);
x=[1:a];
y=[1:a];
[Xm,Ym]=meshgrid(x,y)
for i=1:a^2
for j=1:a^2
[x1,y1]=ind2sub([a a],i);
[x2,y2]=ind2sub([a a],j);
mat(i,j)=(Xm(x1,y1)-Xm(x2,y2))^2+(Ym(x1,y1)-Ym(x2,y2))^2);
end
end
This takes too long as
a^2 is about 20k.
I still haven't been able to come with a nice solution, and not sure if it's even possible. If anyone can give me a hand I really appreciate it.
Thank you in advance.

Réponse acceptée

Yu Jiang
Yu Jiang le 13 Août 2014
Modifié(e) : Yu Jiang le 13 Août 2014
Hi Carlos
Here is what I would do:
mat1=zeros(a^2,a^2);
x=[1:a];
y=[1:a];
[Xm,Ym]=meshgrid(x,y);
Xm1 = kron(ones(a^2,1), Xm(:));
Xm2 = kron(Xm(:), ones(a^2,1));
Ym1 = kron(ones(a^2,1), Ym(:));
Ym2 = kron(Ym(:), ones(a^2,1));
mat1=(Xm1-Xm2).^2+(Ym1-Ym2).^2;
mat1=reshape(mat1,a^2,a^2);
-Yu

Plus de réponses (1)

Roger Stafford
Roger Stafford le 13 Août 2014
[Xm,Ym] = meshgrid(1:a,1:a);
[X1,X2] = meshgrid(Xm(:),Xm(:));
[Y1,Y2] = meshgrid(Ym(:),Ym(:));
mat = (X1-X2).^2+(Y1-Y2).^2;

Catégories

En savoir plus sur MATLAB dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by