How to reshape an array into 3 different matrix with different sizes?

2 views (last 30 days)
I want to reshape A into 3 matrices m1,m2,m3:
A=[1 2 3 4 5 6 7 8 9 4 5 3 5 3 2 5 4 2 4 7 5 ];
m1=-9999*ones(3,3);
m2=-9999*ones(2,2);
m3=-9999*ones(2,4);
the result should look like:
m1=[1 2 3 ;4 5 6 ;7 8 9];
m2=[4 5 ;3 5];
m3=[3 2 5 4; 2 4 7 5];
  1 Comment
David Young
David Young on 19 Nov 2014
"Reshape" normally means to change the shape but keep the same number of elements. Here, though, all the matrices have different numbers of elements. Please could you define the operation you need more exactly?

Sign in to comment.

Accepted Answer

Shane
Shane on 19 Nov 2014
It looks like you just want to split the array up.
A=[1 2 3 4 5 6 7 8 9 4 5 3 5 3 2 5 4 2 4 7 5 ];
subData1 = A(1:9);
subData1 = reshape(subData1, [3 3]);
subData2 = A(10:13);
subData2 = reshape(dubData2, [2 2]);
subData3 = A(14:21);
subData3 = reshape(subData3, [ 4 4]);
This is all manually mind you. If your data structure will change dynamically you will want to try something different.

More Answers (1)

Matt J
Matt J on 19 Nov 2014
Edited: Matt J on 19 Nov 2014
After the lines you've shown with m123=-9999*ones(...) do the following
m1(:)=A(1:9);
m2(:)=A(10:13);
m3(:)=A(14:end);
and transpose as needed.

Categories

Find more on Graphics Object Programming 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!