creating matrix out of another matrix
Show older comments
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.
Accepted Answer
More Answers (1)
out = reshape(results(:,4),13,8).';
out(:,14) = 4; % if you want an 8x14 matrix
10 Comments
mehra
on 9 Sep 2019
mehra
on 9 Sep 2019
mehra
on 9 Sep 2019
"actually ıt should be out=reshape(results(:,4),8,13) since İ need 8 rows and 13 columns but"
No it shouldn't be.
MATLAB stores arrays in column-major order, which is why I reshaped to size (13,8) and then used transpose. You totally ignored the transpose I used, which means that you will get all of your data going down the columns first... which is definitely not what you requested.
"I think the reshape command wouldnt work here because in reshape it takes the first 8 data and then the next 8 data ..."
Actually reshape works fine, exactly the way I used it in my answer.
They way you used it will not work (in exactly the way that you describe).
"in fact I want the first 13 data of column 4 to make my 1st row which includes 13 columns and then the next 13 data should build my next row containing 13 columns and so on"
Which is exactly what the code in my answer does (note: this is not the same as your code).
"how can I write it in a shorter way and in one copact code?"
I would use the code in my answer (not your incorrect code).
mehra
on 9 Sep 2019
"...If the problem is accepting your answer"
This is a public forum and I am not just writing for you but for all future potential readers: if you make a statement that is incorrect regarding my answer and reshape usage than I am not going to let other readers be mislead by your incorrect statements.
"...maybe my explanation was not clear"
Why do you write that? I find your original question was clear enough.
mehra
on 9 Sep 2019
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:
- to misunderstand your question (which is certainly possible),
- 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
Categories
Find more on Matrix Indexing 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!