How i create a matrix from a nested loop?
30 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
DIMITRIOS THEODOROPOULOS
am 26 Jun. 2018
Bearbeitet: Adam Danz
am 26 Jun. 2018
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 Kommentar
Adam Danz
am 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?
Akzeptierte Antwort
Adam Danz
am 26 Jun. 2018
Bearbeitet: Adam Danz
am 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 Kommentar
Stephen23
am 26 Jun. 2018
Note that it is recommended to preallocate arrays before loops:
Array preallocation is a habit that all beginners need to learn.
Weitere Antworten (1)
Adam
am 26 Jun. 2018
Bearbeitet: Adam
am 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!
0 Kommentare
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!