Why is vertcat slowing things down?

3 ビュー (過去 30 日間)
Doron
Doron 2012 年 2 月 23 日
編集済み: Matt J 2013 年 10 月 22 日
In the code below, 10,000 repetitions takes 2 seconds... and 100,000 repetitions takes 60 seconds! (I was expecting 20 seconds or less)...
What is going on? by a process of elimination, I suspect "vertcat" is slowing things down...
(Please see how "tic toc" behaves with repetitions = 10,000 and 100,000)
Is this a known issue with vertcat? If so, what are my other options?
(Note: looping the 10,000 algorithm 10 times would be much faster... but surely there has to be a more elegant way to do 100,000 repetitions in 20 seconds)
Thanks
Doron
*********
tic
repetitions = 10000
llim = -1;
ulim = 3;
xstack = [];
xlifestack = [];
for i = 1:repetitions
x = 0;
xlife = 0;
while ulim > x && x > llim
x = x + normrnd(0,1);
xlife = xlife + 1; % "...and the walk lives one more step"
end
if x > llim
x = ulim;
else x = llim;
end
xstack = vertcat(xstack, x);
xlifestack = vertcat(xlifestack, xlife);
end
xbar = mean(xstack);
xlifebar = mean(xlifestack);
toc

採用された回答

Honglei Chen
Honglei Chen 2012 年 2 月 23 日
My 2 cents::
1. You may want to preallocate the memory. The in each iteration, you just put the new data into corresponding slots.
2. If your entire purpose is to compute the mean, then why not just record the sum and number of samples and update them for each iteration. These are just scalars.
  8 件のコメント
Doron
Doron 2012 年 2 月 23 日
right...
xstack = zeros(100000,1)
%then
for i = 1:repetitions
% x is computed by an algorithm
xstack(i) = x
end
Doron
Doron 2012 年 2 月 23 日
Thanks Oleg and Honglei,
I went with "xstack = (repetitions, 1)"
I don't know which one to accept as the answer, so I flipped a coin...
Thank you both
Doron

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePerformance and Memory についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by