MATLAB Answers

madhan ravi
1

Which way is better?

Asked by madhan ravi
on 15 Aug 2019
Latest activity Commented on by madhan ravi
on 15 Aug 2019
Note: This is not about preallocating variable in a loop. This is for general case.
For instance:
a(10,10) = 10; % the rest are filled with zeros
%or
a = zeros(10,10);
a(10,10) = 10;

  4 Comments

Show 1 older comment
madhan ravi
on 15 Aug 2019
Thank you for the response sir Walter. Even a while ago , did some experiments and found out that multiplying a constant against ones() were always faster. Forgot this point , sorry :/. So with my above two approaches, is the first option a good way of coding?
madhan ravi
on 15 Aug 2019
Thank you sir Walter :)

Sign in to comment.

Products


Release

R2018b

1 Answer

Adam Danz
Answer by Adam Danz
on 15 Aug 2019
Edited by Adam Danz
on 15 Aug 2019

In terms of speed, the 2nd option is 3.0 times faster on average (p<0.0001, Wilcoxon Signed Rank; 1 million individually timed iterations of the following 2 options).
a = []; % to reset a upon each loop
a(10,10) = 10;
% versus
a = []; % to reset a upon each loop
a = zeros(10,10);
a(10,10) = 10;
Declaring 'a' as zeros and then filling in the index (10,10) could also avoid other errors that option 1 may impose if 'a' is already a variable or function that exists.
Lastly, I think the 2nd option is more readable. Upon first glace of the first option, I'm wondering where 'a' came from.

  3 Comments

madhan ravi
on 15 Aug 2019
Thanks Adam for the answer. I knew the differences in speed. I mean't to ask whether if the first option also considered as a good way to code.
Rik
on 15 Aug 2019
There is nothing inherently wrong with the first option, but because it can cause confusion, you should add a comment there. It is also important to make sure that a doesn't exist before this executes.
madhan ravi
on 15 Aug 2019
Thanks Rik.

Sign in to comment.