Advice on a few bottlenecks in my code
Info
Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.
Ältere Kommentare anzeigen
According to the profiler, I have four lines of code taking up 99% of my CPU time.
if(statment)
pCond = (bold_Phi(k,2) <= data(thisIdx : idx, 7));
else
pCond = (data(thisIdx : idx, 7) <= bold_Phi(k,2));
end
IDY = find( (data(thisIdx : idx, 1) == -1) & (pCond) & (data(thisIdx : idx, 11) == bold_Phi(k,p + 10)) );
IDZ = find( (dV(thisIdx : idx, :) <= -bold_Phi(k,3)) & (pCond) & (sCond) );
where bold_Phi and data are 2D matrices and dV is a vector.
I dont think the time penalty is coming from the indexing as the following statement is very quick
~isnan(data(thisIdx : idx, 3));
anything obvious I have missed that will help me speed up these few statements?
thank you
4 Kommentare
Matt Kindig
am 21 Feb. 2013
How large are bold_Phi and dV?
Matlab2010
am 22 Feb. 2013
Sean de Wolski
am 22 Feb. 2013
What is statement?
Matlab2010
am 22 Feb. 2013
Bearbeitet: Matlab2010
am 22 Feb. 2013
Antworten (2)
Kye Taylor
am 21 Feb. 2013
If you don't need the actual indices, you can omit the find command to save time. In particular, notice that the following code blocks are equivalent but the first does not use find:
data = rand(1000,1);
isBig = data>0.5;
bigData = data(isBig);
and
data = rand(1000,1);
isBigIdx = find(data>0.5);
bigData2 = data(isBigIdx);
1 Kommentar
Matlab2010
am 22 Feb. 2013
Mark Whirdy
am 22 Feb. 2013
Bearbeitet: Mark Whirdy
am 22 Feb. 2013
0 Stimmen
(Almost-) Never use the find() function!
I'd need to see the contents of the variables, but at first glance you can maybe just remove it altogether with same functionality?
Diese Frage ist geschlossen.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!