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

1 view (last 30 days)
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 ;-) !

Accepted Answer

Jan
Jan on 27 Jul 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.

More Answers (1)

Daniel Shub
Daniel Shub on 27 Jul 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.

Community Treasure Hunt

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

Start Hunting!