Result producing 1x5 array instead of 10x5?

6 views (last 30 days)
Hi all,
I have the following code which I'm expecting to produce a 10x5 array but it's only giving me a 1x5, and I'm not sure why?
n = 10;
result = zeros(n,5);
for k=1:n;
A0=1;P0=29;g=rand;p=rand;B=rand;
result = [A0,P0,g,p,B];
end;
Alternatively, if I write the code this way I get a 10x1 cellular array, each entry of which represents a 1x5 numeric array. This gives me the number of results I want, but not in the format I'm looking for (which, again, is ultimately a 10x5 array). Thanks in advance!
n = 10;
result = cell(n,1);
for k=1:n;
A0=1;P0=29;g=rand;p=rand;B=rand;
result{k} = {A0,P0,g,p,B};
end;

Accepted Answer

Alex Mcaulley
Alex Mcaulley on 4 Jun 2019
You need to specify the index:
n = 10;
result = zeros(n,5);
for k=1:n;
A0=1;P0=29;g=rand;p=rand;B=rand;
result(k,:) = [A0,P0,g,p,B];
end;
  4 Comments
madhan ravi
madhan ravi on 4 Jun 2019

That would just copy the same g p B values through repmat() so creating n elements for g p B and then copying it into the matrix would be better.

Alex Mcaulley
Alex Mcaulley on 4 Jun 2019
Yes, as @madhan said, if you want random numbers for all rows:
n = 10;
A0=1;P0=29;
result = [repmat([A0,P0],n,1),rand(n,3)]

Sign in to comment.

More Answers (1)

Rob L
Rob L on 4 Jun 2019
Your first method overwites the result every loop with a [ 1 x 5 ] array.
You could (among many other solutions) use:
n = 10;
result = zeros(n,5);
for k=1:n
A0=1;P0=29;g=rand;p=rand;B=rand;
result(k,1) = A0;
result(k,2) = P0;
result(k,3) = g;
result(k,4) = p;
result(k,5) = B;
end

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!