How to improve performance of code ?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
yogesh jain
am 26 Feb. 2016
Kommentiert: Steven Lord
am 29 Feb. 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 Kommentare
Jan
am 29 Feb. 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.
Akzeptierte Antwort
Jan
am 29 Feb. 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 Kommentare
Steven Lord
am 29 Feb. 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.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Delaunay Triangulation 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!