How i create a matrix from a nested loop?

73 views (last 30 days)
For this simple loop
for i=1:5
for j=1:5
A=[i j]
end
end
the result i get is 25 arrays ,2x1 each one. But i want them gathered as a matrix of 25x2.How can i simply do it?
  1 Comment
Adam Danz
Adam Danz on 26 Jun 2018
On each loop you're overwriting the value of A so you won't get 25 arrays, you'll get one array, 'A' that is of size [1-by-2] and A will equal [5,5] which are the last values of i and j.
You expect to get an array that is [25-by-2] but what values do you expect to be in that array?

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 26 Jun 2018
Edited: Adam Danz on 26 Jun 2018
If this is what you're looking for
A = zeros(5*5,2);
c = 0;
for i = 1:5
for j = 1:5
c=c+1;
A(c, :) = [i,j];
end
end
You can do this instead
A = [reshape(repmat(1:5,5,1),25,1), repmat(1:5,1,5)'];
  1 Comment
Stephen23
Stephen23 on 26 Jun 2018
Note that it is recommended to preallocate arrays before loops:
Array preallocation is a habit that all beginners need to learn.

Sign in to comment.

More Answers (1)

Adam
Adam on 26 Jun 2018
Edited: Adam on 26 Jun 2018
A = zeros( 25, 2 );
for i=1:5
for j=1:5
idx = 5 * ( i - 1 ) + j;
A(idx,:) =[i, j];
end
end
gives you what you want for your example, although there are much more efficient ways to create the resultant matrix than using a nested for loop, e.g.
A = [ repelem( 1:5, 5 ); repmat( 1:5, 1, 5 ) ]';
to throw in yet another variant!

Community Treasure Hunt

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

Start Hunting!