Salut,
voici un code que j'ai fait, en fait il permet de remplir une matrice 3D, element par element , il s'execute en 3 min pour une matrice de 9*9*9mais si j'ai besoin de travailler avec une matrice de 200*200*200 par exemple, ca va prendre enormement de temps!!
je crois qu'il faut trouver un moyen de remplir la matrice d'un facon plus rapide en evitant les boucles...mais j'arrives pas...
voici la partie du code que je veux modifier:
est ce que vous pouvez me trouver une solution pour ameliorer la vitesse d'execution de mon programme??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 V=zeros(fix(d),fix(d),fix(d)); F=pos_voxel1(d,u); fprintf('%.0f\n',d); dprime=power(d,3); MIN=min(F(:,2)); nb=1000; tt=1; %%%%%%%%%%% calcul de l'intensité de chaque voxel %%%%%%%%%%%%%%%%%%%%% for i=1:1:dprime X=d+(MIN-F(i,2))/u; Y=d+(MIN+F(i,1))/u; Z=d+(MIN+F(i,3))/u; for j=1:1:nprime S=sqrt((F(i,1)-C(j,1))^2+(F(i,2)-C(j,2))^2+(F(i,3)-C(j,3))^2); Sprime=S./a; if (i==nb*tt) fprintf('%.0f %% de blob2voxel ont été exécutés en %.2f secondes, soit %.2f minutes\n',i*100/dprime,etime(clock,t1),etime(clock,t1)/60) tt=tt+1; end if real(S)<=c h=8.63*sqrt(1-power(Sprime,2)); t=power((1-Sprime.^2),M); b=abs((real(besseli(m,h))./real((besseli(m,alpha)))).*real(t)); V(X,Y,Z)= V(X,Y,Z)+ Q(j,1)*b; else V(X,Y,Z)=V(X,Y,Z); end end end
merci=)
Lama
Partager