Bonjour,
J'ai un programme avec une grande quantité de boucles, son exécution est donc assez lente.
Il y a 3 boucles inbriquées qui traite les 3 dimesions x, y et z, sur des matrices 3D.
J'aimerais pouvoir transformer coder les 3 boucles sous forme de matrices mais il y a un élément qui gène.
Voici une partie du code en question :
1 2 3 4 5 6 7 8 9 10 11
| for p=1:np % boucle sur le nombre de points
x(p)=M(p,2);y(p)=M(p,3);z(p)=M(p,4);f(p)=M(p,5);A(p)=M(p,6);
w(p)=2*pi*f(p);
for ix=1:n
for iy=1:n
for iz=1:n
r(p,ix,iy,iz)=sqrt((X(ix,iy,iz)-x(p))^2+(Y(ix,iy,iz)-y(p))^2+(Z(ix,iy,iz)-z(p))^2);
end
end
end
end |
La 2me ligne récupère juste les valeurs de x, y, z, f et A dans une matrice M, ces valeurs sont des vecteurs de dimension (np,1).
X, Y et Z sont de taille (n,n,n).
J'aimerais remplacer les 3 boucles ix, iy et iz par une commande de ce type :
r(p,:,:,:)=sqrt((X-x(p).*ones(n,n,n))^2+(Y-y(p)*ones(n,n,n))^2+(Z-z(p)*ones(n,n,n))^2);
Bien sur cela ne fonctionne pas car il y a un problème de dimension cer r est de dimension (np,n,n,n).
Merci d'avance pour votre aide.
Partager