Azzera filtri
Azzera filtri

Why is loop time execution better than vectorized form in this case?

1 visualizzazione (ultimi 30 giorni)
Hello everyone,
At first, I had the following code:
for ii = 1:numel(data.classes)
switch data.classes{ii}
case 1
data.classes{ii} = 'case 1';
% Active classes
case 2
data.classes{ii} = 'case2';
otherwise
disp('Invalid case.');
end
end
However, I know that vectorized code is preferred instead of loops, so I changed it to
case1Found = ismember(data.classes, case1Members);
case2Found = ismember(data.classes, case2Members);
data_.classes(case1Found) = {'case1'};
data_.classes(case2Found) = {'case2'};
When comparing their performance (execution time) I was surprised to see that the first option, with loops was twice as fast than the vectorized option (0.014688 s vs. 0.029204 s)!
Why is this? Thanks ;-) !

Risposta accettata

Jan
Jan il 27 Lug 2011
ISMEMBER is powerful and in consequence time consuming. It performs one or two sortings of the inputs, which is inefficient for large data sets (_large_ means e.g. 1e3 or 1e6 elements). For small data sets (10 elements) the overhead of ISMEMBER is more important.
You can run the PROFILEr to see, which lines cause the most computing time.

Più risposte (1)

Daniel Shub
Daniel Shub il 27 Lug 2011
The gains in efficiency from vectorization are not always that substantial anymore (and can even be negative) since loops in MATLAB have become much faster over the years, thanks, I believe, to the JIT accelerator.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by