For loop with horzcat

2 views (last 30 days)
Ryosuke Saito
Ryosuke Saito on 12 Apr 2020
Commented: Ryosuke Saito on 12 Apr 2020
Why does this not success?? Would someone help me correct the code?
A=[1 5; 3 3; 8 6; 4 8; 9 14; 11 11; 13 12; 15 7; 17 15; 1 20]
B=[]
for i=1:5
for j=1:5
B(i,:)=horzcat(B(i,:),A(i+j-1,:));
end
end
I'd like to get this
B=[1 5 3 3 8 6 4 8 9 14;3 3 8 6 4 8 9 14 11 11; 8 6 4 8 9 14 11 11 13 12; 4 8 9 14 11 11 13 12 15 7;9 14 11 11 13 12 15 7 17 15;11 11 13 12 15 7 17 15 1 20]

Accepted Answer

Matt J
Matt J on 12 Apr 2020
Edited: Matt J on 12 Apr 2020
Another way,
AA=reshape(A.',[],1).';
B=cell(numel(AA),1);
for i=1:2:11
B{i}=AA(i:i+9);
end
B=cell2mat(B)
  1 Comment
Ryosuke Saito
Ryosuke Saito on 12 Apr 2020
Thanks so much! This is exactly what I'd like to do and I found this works!!

Sign in to comment.

More Answers (1)

Matt J
Matt J on 12 Apr 2020
Edited: Matt J on 12 Apr 2020
horzcating in for-loops is bad practice. Better to do,
AA=reshape(A.',[],1).';
B=AA( (1:10)+(0:2:10).' )
  2 Comments
Ryosuke Saito
Ryosuke Saito on 12 Apr 2020
Thanks for your comment. I am sorry that I set up a simple table as the contents of A here. Actual contents of A in the computation I am trying to do is much complicated. So the proposed solution is not useful.
Matt J
Matt J on 12 Apr 2020
My solution is independent of the contents of A.

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!