jub*_*0bs 6 optimization matlab append
这是如何在MATLAB中将元素附加到数组的后续问题?该问题解决了如何将元素附加到数组.这里讨论了两种方法:
A = [A elem] % for a row array
A = [A; elem] % for a column array
Run Code Online (Sandbox Code Playgroud)
和
A(end+1) = elem;
Run Code Online (Sandbox Code Playgroud)
第二种方法具有与行和列阵列兼容的明显优势.
但是,这个问题是:两种方法中哪一种最快?我的直觉告诉我,第二个是,但我想要一些证据支持或反对.任何的想法?
A(end+1) = elem
)更快根据下面的基准测试(使用timeit
File Exchange 的基准测试功能运行),第二种方法 ( A(end+1) = elem
) 速度更快,因此应该是首选。
但有趣的是,两种方法之间的性能差距在旧版本 MATLAB 中比在较新版本中要小得多。
function benchmark
n = logspace(2, 5, 40);
% n = logspace(2, 4, 40);
tf = zeros(size(n));
tg = tf;
for k = 1 : numel(n)
x = rand(round(n(k)), 1);
f = @() append(x);
tf(k) = timeit(f);
g = @() addtoend(x);
tg(k) = timeit(g);
end
figure
hold on
plot(n, tf, 'bo')
plot(n, tg, 'ro')
hold off
xlabel('input size')
ylabel('time (s)')
leg = legend('y = [y, x(k)]', 'y(end + 1) = x(k)');
set(leg, 'Location', 'NorthWest');
end
% Approach 1: y = [y, x(k)];
function y = append(x)
y = [];
for k = 1 : numel(x);
y = [y, x(k)];
end
end
% Approach 2: y(end + 1) = x(k);
function y = addtoend(x)
y = [];
for k = 1 : numel(x);
y(end + 1) = x(k);
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2904 次 |
最近记录: |