Built-in functions VS explicit loops: which is faster in MATLAB?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hi all,
I did some speed tests with implicit functions and explicit loops, both repeat 1000 times and calculate average time. First one is eTe:
nh = 1000;
nw = 5;
nCount = 1000;
emtx = rand(nh, nw);
%%test ete
% implicit
tTime1 = 0;
for count = 1:nCount
tic;
ete = emtx' * emtx;
x = toc;
tTime1 = tTime1 + x;
end
aTime1 = tTime1 / nCount;
% explicit
etetest = zeros(nw, nw);
tTime2 = 0;
for count = 1:nCount
tic;
for i = 1:nw
for j = 1:nw
e1 = emtx(:, i);
e2 = emtx(:, j);
etetest(i, j) = etetest(i, j) + e1' * e2;
end
end
x = toc;
tTime2 = tTime2 + x;
end
aTime2 = tTime2 / nCount;
results are
aTime1 =
2.0515e-05
aTime2 =
1.9389e-04
second one tests cellfun:
nd = 100;
nt = 10;
ecell = mat2cell(emtx, nh, ones(1, nw));
% implicit
tTime3 = 0;
for count = 1:nCount
tic;
ecellres = cellfun(@(v) reshape(v, [nd, nt]), ecell, 'un', 0);
x = toc;
tTime3 = tTime3 + x;
end
aTime3 = tTime3 / nCount;
% explicit
ecellres1 = cell(1, nw);
tTime4 = 0;
for count = 1:nCount
tic;
for i = 1:nw
ecellres1(i) = {reshape(ecell{i}, [nd, nt])};
end
x = toc;
tTime4 = tTime4 + x;
end
aTime4 = tTime4 / nCount;
results are
aTime3 =
1.8522e-04
aTime4 =
2.5675e-05
In the first test, ete is faster than for loops; in the second test, for loops are faster than cellfun. As far as I understand, both ete and cellfun use loops in MATLAB, why is there a speed difference? Is there a critical point, where built-in functions are faster than loops?
Many thanks!
2 comentarios
Adam
el 17 de Mayo de 2017
cellfun is almost always slower than an equivalent for loop.
You should use
doc timeit
for timing function times though. tic/toc is not the most reliable, especially for such small run-times.
John D'Errico
el 17 de Mayo de 2017
Editada: John D'Errico
el 17 de Mayo de 2017
Which code will be faster very much depends on how you write the code. It depends on your coding skill. It depends on the specific problem. It often depends on problem size. Time required will often depend on machine dependent things, like your CPU, number of processors, amount of RAM. Finally, these questions often change over time, as TMW makes changes to their provided tools, changes in parser intelligence, etc.
So to answer which variation is faster is best done using simple calls to timeit, and the best measure is done by you on your machine, in the version of MATLAB that you will be using. The point is, you are asking a question that lacks a hard, fast, fixed answer, true on any computer, on any release of MATLAB.
tic and toc are terrible ways to test time. Use timeit instead!
Respuestas (0)
Ver también
Categorías
Más información sobre Performance and Memory 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!