我打算假设你不会做像平方操作那样简单的事情,而你正在尝试做的事情还没有在MATLAB中进行矢量化。
最好调用一次函数,并在函数中做循环。随着元素数量的增加,您会注意到操作时间的显着增加。
让我们的职能是:
function result = getSquare(x)
result = x*x; % I did not use .* on purpose
end
function result = getSquareVec(x)
result = zeros(1,numel(x));
for idx = 1:numel(x)
result(:,idx) = x(idx)*x(idx);
end
end
而且,我们称他们从脚本:
y = 1:10000;
tic;
for idx = 1:numel(y)
res = getSquare(y(idx));
end
toc
tic;
res = getSquareVec(y);
toc
我跑了代码几次,原来调用该函数只有一次是至少快两倍。
Elapsed time is 0.020524 seconds.
Elapsed time is 0.008560 seconds.
Elapsed time is 0.019019 seconds.
Elapsed time is 0.007661 seconds.
Elapsed time is 0.022532 seconds.
Elapsed time is 0.006731 seconds.
Elapsed time is 0.023051 seconds.
Elapsed time is 0.005951 seconds.
你是绝对正确的'arrayfun'比元素内置函数慢 - 除非你使用'gpuArray's,其中'arrayfun'是要走的路。 – Edric
@Edric:一个该死的,我真的希望我有一个GPU来玩这个东西......我不知道它!感谢您的高举。不会*总是*更快我会想象(由于相关的内存问题),但仍然可以想象,它通常会更快。 –
@Edic:顺便说一下 - *真* *?为什么'x。^ 2'(''''''''gpuArray')*不会*分布在GPU上? –