Storing Outputs from a Nested Loop

18 ビュー (過去 30 日間)
A M
A M 2017 年 1 月 30 日
コメント済み: Iddo Weiner 2017 年 2 月 1 日
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
Iddo Weiner 2017 年 1 月 31 日
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 件のコメント
Iddo Weiner
Iddo Weiner 2017 年 2 月 1 日
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

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

その他の回答 (1 件)

Niels
Niels 2017 年 1 月 31 日
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;

Community Treasure Hunt

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

Start Hunting!

Translated by