【发布时间】:2016-03-28 07:26:17
【问题描述】:
以下两个代码 sn-ps 执行相同的任务(从 N-dim 球体均匀生成 M 个样本)。我想知道为什么后一个比前一个消耗更多的时间。
%% MATLAB R2014a
M = 30;
N = 10000;
#1
tic
S = zeros(M, N);
for k = 1:M
P = ones(1, N);
for i = 1:N - 1
t = rand*2*pi;
P(1:i) = P(1:i)*sin(t);
P(i+1) = P(i+1)*cos(t);
end
S(k,:) = P;
end
toc
#2
tic
S = ones(M, N);
for k = 1:M
for i = 1:N - 1
t = rand*2*pi;
S(k, 1:i) = S(k, 1:i)*sin(t);
S(k, i+1) = S(k, i+1)*cos(t);
end
end
toc
输出是:
Elapsed time is 15.007667 seconds.
Elapsed time is 59.745311 seconds.
我也试过 M = 1,
Elapsed time is 0.463370 seconds.
Elapsed time is 1.566913 seconds.
#2 比 #1 慢近 4 倍。 #2 中频繁访问 2d 元素是否会导致耗时?
【问题讨论】:
标签: performance matlab