
Storing Outputs from a Nested Loop
    16 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    A M
 el 30 de En. de 2017
  
    
    
    
    
    Comentada: Iddo Weiner
      
 el 1 de Feb. de 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.
0 comentarios
Respuesta aceptada
  Iddo Weiner
      
 el 31 de En. de 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)

8 comentarios
  Niels
      
 el 31 de En. de 2017
				Matlab uses (as you should also do) smart shortcuts for its functions and variables, such as numel for Number of Elements
  Iddo Weiner
      
 el 1 de Feb. de 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
Más respuestas (1)
  Niels
      
 el 31 de En. de 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;
0 comentarios
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!