Improving the efficiency of triple nested loop
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
The code tests a 3D binary array for the largest sphere that can fit into the porous regions. The code works however for a 40x40x40 array for a triple nested loop, the code runs slowly. I was wondering if there were a way that it could be rewritten as to not take so long. An initial idea was not using interp3 every single iteration but I was not sure how to write that.
function poresize=poresizeAlgorithm(tiff,scaffoldLength)
tiffInv=~tiff;
j=size(tiff,1);
k=size(tiff,2);
l=size(tiff,3);
[x,y,z] = meshgrid([1:j],[1:k],[1:l]);
[x1,y1,z1] = meshgrid([1:j],[1:k],[1:l]);
r=0.5;
position=[];
for m=1+ceil(r):size(tiffInv,1)-ceil(r)
for n=1+ceil(r):size(tiffInv,2)-ceil(r)
for o=1+ceil(r):size(tiffInv,3)-ceil(r)
centreSphere=tiffInv(m,n,o);
if centreSphere==1
%add sphere to array
equ = ((x-m).^2 + (y-n).^2 + (z-o).^2)./(r.^2);
z11 = interp3(x,y,z,equ,x1,y1,z1,'nearest'); %was spline
ix = 1 > z11;
volSphere=sum(ix,'all');
testSphere=ix+tiffInv;
numTwo=sum(testSphere(:) == 2);
if volSphere==numTwo
output=[m,n,o,r];
position=[position output];
r=r+0.25;
position2=[reshape(position,4,[])]';
continue
end
end
end
end
end
poresize=(scaffoldLength/j) * (position2(end,4)*2);
end
5 comentarios
Dyuman Joshi
el 29 de Dic. de 2023
What is the objective/idea behind the interp3 line?
If you can provide additional details regarding what you are trying to do, we might be able to offer more suggestions.
Ver también
Categorías
Más información sobre Surface and Mesh Plots en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!