# creating matrix out of another matrix

4 views (last 30 days)
mehra on 9 Sep 2019
Commented: mehra on 9 Sep 2019
I have a results matrix of size 104*14. I want to create a matrix of size 8*13 in which u(1,1)=results((1:13),4) and....I tried to write the matrix like:
u_mean_Uund=[results(1:13),4; results(14:26),4;results(27:39),4;results(40:52),4;results(53:65),4;...
results(66:78),4;results(79:91),4;results(92:104),4]
But this shows the first column of the results matrix, I actually want a 8*13 matrix in which the arrays are all from column 4.
Stephen23 on 9 Sep 2019
Your description contradicts itself: "I want to create a matrix of size 8*13..." but also "I actually want a 8*14 matrix...": so do you want an 8x13 or an 8x14 matrix?
mehra on 9 Sep 2019

mehra on 9 Sep 2019
I solved it using following for loop:
for nn=1:8
u_depth(nn,:)=transpose(results((13*(nn)-12):13*(nn),4));
end
Bruno Luong on 9 Sep 2019
Edited: Bruno Luong on 9 Sep 2019
"I explained why the older comment doesn't give the answer"
And Stephen has explained to you the opposite and I tested it
results=rand(104,14);
for nn=1:8
u_depth(nn,:)=transpose(results((13*(nn)-12):13*(nn),4));
end
% Stephen's solution
out = reshape(results(:,4),13,8).';
isequal(u_depth,out)
It returns 1, meaning both gives the same ANSWER on a random input. So Stephen is right and you are wrong.
You just are not rigouruous person and lack patient or perhaps a bit of courtesy to discuss with Stephen.
mehra on 9 Sep 2019
Well... I dont know niether you nor Stephen and I dont want to argue with anyone...i was rushing to get the answer as soon as possible, so I also worked on that... Anyway i think you cant judge people like this...and again I thanks everyone for their answers and their help.

Stephen23 on 9 Sep 2019
Edited: Stephen23 on 9 Sep 2019
out = reshape(results(:,4),13,8).';
out(:,14) = 4; % if you want an 8x14 matrix
Stephen23 on 9 Sep 2019
"...but still you have not seen my problem..."
If I failed to understand your problem as you claim, how did I write code that returns exactly the same result as your loop (which you posted four hours later)?
>> results = rand(104,14);
>> for nn=1:8 % your loop
u_depth(nn,:)=transpose(results((13*(nn)-12):13*(nn),4));
end
>> out = reshape(results(:,4),13,8).'; % my simpler reshape
>> isequal(u_depth,out) % The same outputs!
ans =
1
That would require me to make two mistakes:
1. to misunderstand your question (which is certainly possible),
2. then to write strangely buggy MATLAB code that doesn't do what I want it to do (based on my incorrect understanding of your problem), but that coincidentally ends up doing exactly the same thing as your loop....
With such luck, I should go an buy a lotto ticket!
mehra on 9 Sep 2019
Anyway i am happy that my solution also works