# Storing Outputs from a Nested Loop

2 views (last 30 days)
A M on 30 Jan 2017
Commented: Iddo Weiner on 1 Feb 2017
I have the following problem, wherein, i want to store outputs from the nested loops. I am just presenting a simple scenario to depict the situation:
for a=[1:1:10]
for b=[1:1:10]
c=a*b
end
end
c in this case would store the last value i.e. 100. How to develop an array which stores all the values of c from 1 to 100 as c(1,1)=1, c(1,2)=2 and so on.

Iddo Weiner on 31 Jan 2017
By initiating an empty array and then filling it with the looping indices:
c = nan(10,10);
for a = 1:10
for b= 1:10
c(a,b)=a*b;
end
end
% visualize c
imagesc(c)
Niels on 31 Jan 2017
Matlab uses (as you should also do) smart shortcuts for its functions and variables, such as numel for Number of Elements
Iddo Weiner on 1 Feb 2017
I think you are supposed to get a 10*10 matrix in the example you posted. Yes, nan() initiates an empty array. You can also use zeros() to initiate a matrix of zeros. BTW - this code works also without the imitation line, i.e.:
for a = 1:10
for b= 1:10
c(a,b)=a*b;
end
end
BUT this is highly un-recommended, because the shape of c changes constantly - which is a very inefficient use of memory. When you pre-allocate then c's shape is constant and the whole code runs much quicker (of course in the example case the array is very small and there won't be a significant difference).
Hope this helps, good luck

### More Answers (1)

Niels on 31 Jan 2017
some changes:
aMax=10; % equal to #of rows
bMax=10; % equal to #of colums
c=zeros(aMax,bMax);
for a=1:aMax % let a run from 1 to aMax, stepwidth:=1
for b=1:bMax
c(a,b)=a*b; % hope you know that c is not running fom 1 to 100
end
end
if you want c to cointain to values 1:(aMax*bMax) (100 in current state) change
c(a,b)=(a-1)*aMax+b;