How to improve performance of code ?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
yogesh jain
el 26 de Feb. de 2016
Comentada: Steven Lord
el 29 de Feb. de 2016
Hello all, I am using this code for getting the data point coordinates among defined vertices .
ver = vertice; % nX3 matrix
ver=ceil(ver);
tess=delaunay(ver);
mn_x=min(ver(:,1));
mx_x=max(ver(:,1));
mn_y=min(ver(:,2));
mx_y=max(ver(:,2));
mn_z=min(ver(:,3));
mx_z=max(ver(:,3));
[X,Y,Z]=ndgrid(mn_x:0.8:mx_x , mn_y:0.8:mx_y , mn_z:0.8:mx_z);
sz=size(X);
P=ones(sz(1)*sz(2)*sz(3),3);
for i=1:sz(1)*sz(2)*sz(3)
P(i,1)=X(i);
P(i,2)=Y(i);
P(i,3)=Z(i);
end
pts=zeros(size(P));
for j=1:length(P)
t=tsearchn(ver,tess,P(j,:));
isin=~isnan(t);
if isin ==1
pts(j,:)=P(j,:);
end
end
It works fine but takes a lot time to calculate. How to improve the performance of code ? Thank you :)
4 comentarios
Jan
el 29 de Feb. de 2016
@yogesh jain: It matters if you are talking about day or micro-seconds. n might be 1e3 or 1e10, so please be specific and do not let us guess the details.
Respuesta aceptada
Jan
el 29 de Feb. de 2016
Please use the profile to find the bottleneck of the code. Some parts are easy to accelerate, but this does not really help, if they take 1% of the total time. E.g.:
P=ones(sz(1)*sz(2)*sz(3),3);
for i=1:sz(1)*sz(2)*sz(3)
P(i,1)=X(i);
P(i,2)=Y(i);
P(i,3)=Z(i);
end
Faster:
P = [X(:), Y(:), Z(:)];
4 comentarios
Steven Lord
el 29 de Feb. de 2016
As Jan suggested, rather than calling TSEARCHN multiple times with one row at a time call it with a matrix as the third input and perform all your searches at once. Then check which of the points are outside the convex hull and which are inside and process each group appropriately.
Más respuestas (0)
Ver también
Categorías
Más información sobre Delaunay Triangulation 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!