How can speed up the blow codes?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
The blow code is part of my project. the performance of this code is alittle low. it is about 0,5s but in higher Nx values, the effiency decreases. Also, etas is a (Nx*Ny,ngrain=70) matrix. it does not contain zero values. I'd be appreciate if any suggest can improve the efficiency of below code.
Nx=512;
for igrain=1:70+0
ncount=0;
for i=1:Nx
for j=1:Nx
ii =(i-1)*Nx+j;
eta2(i,j) =eta2(i,j)+etas(ii,igrain)^2;
if(etas(ii,igrain) >= 0.5)
ncount=ncount+1;
end
ncount=ncount/(512*512);
end
end
1 Kommentar
Nicolas B.
am 2 Dez. 2019
Bearbeitet: Nicolas B.
am 2 Dez. 2019
are eta2 and etas pre-defined tables? Or are the size of these variables change?
Antworten (1)
Fabio Freschi
am 2 Dez. 2019
Bearbeitet: Fabio Freschi
am 2 Dez. 2019
Edit: added attempt for ncount
I don't understand what ncount is doing, it looks like a counter but I don't understand why you are repeatedly dividing by 512*512. I made my try, but some insight could help. However the calculation of eta2 can be drastically simplified using vectorization. Here I compare your solution (with some fixes) with the vectorized version (with a '0' added o the variables' names)
Nx = 512;
ngrain = 70;
eta2 = zeros(Nx,Nx);
etas = rand(Nx*Nx,ngrain);
ncountTot = zeros(ngrain,1);
% original code (with some fixes)
tic
for igrain=1:ngrain
ncount=0;
for i=1:Nx
for j=1:Nx
ii =(i-1)*Nx+j;
eta2(i,j) =eta2(i,j)+etas(ii,igrain)^2;
if(etas(ii,igrain) >= 0.5)
ncount=ncount+1;
end
end
ncountTot(igrain)=ncount/(Nx*Nx);
end
end
toc
% vectorized code
tic
etas0 = reshape(etas,Nx,Nx,ngrain);
eta20 = sum(etas0.^2,3)';
ncountTot0 = squeeze(sum(etas0 >= 0.5,[1 2])/(Nx*Nx));
toc
% check
norm(eta2-eta20)/norm(eta2)
norm(ncountTot-ncountTot0)
2 Kommentare
Fabio Freschi
am 3 Dez. 2019
Bearbeitet: Fabio Freschi
am 3 Dez. 2019
My pleasure! If the answer solves your original problem, please accept it.
For the second code, could you please check it? it looks like one for loop is missing
Do you need at the end of the loop only term3 or also den?
Siehe auch
Kategorien
Mehr zu Function Creation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!