Transposing matrix using reshape
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello,
I am a student taking a class to learn matlab. For a project, our instructor is requiring us to transpose a function using the reshape command. Because of the way matlab reads matrixes, column-dominant, this is proving very difficult.
In essence, I need to perform the following using only reshape:
A = A'
or
A = [1,2,3;4,5,6] must become A = [1,4;2,5;3,6]
Thanks for your help.
10 Kommentare
Antworten (5)
Walter Roberson
am 21 Mär. 2012
reshape() by itself cannot be used to transpose a matrix unless the matrix happens to be a vector. If the matrix is not a vector then transpose alters the internal storage order of the elements, whereas reshape() never does.
For example, internally [1 2; 3 4] is stored in the order 1 3 2 4, and transpose of [1 2;3 4] would be [1 3;2 4] which would be stored in the order 1 2 3 4. You can see that the 2 and 3 have swapped internal places in the transpose. Reshape never swaps internal orderings.
0 Kommentare
James Tursa
am 21 Mär. 2012
This is an ill-posed problem or something is missing from the problem statement. There are various ways to accomplish a transpose via indexing or permute etc as has already been pointed out. None of these involve the reshape function and as Walter points out reshape never alters the internal memory order (which is required for a general matrix transpose) so how the heck is reshape supposed to be involved in this in the first place?
0 Kommentare
Image Analyst
am 21 Mär. 2012
Are you sure he didn't mean permute?
permute(A, [2 1])
ans =
1 4
2 5
3 6
Geoff
am 21 Mär. 2012
Okay, got a solution. Your matrix (let's just use the example of A) can be indexed by the vector 1:6, but you need to translate this index to be row-wise instead of column-wise.
I = 1:size(A(:),1)
So first, work out how to generate your row and column indices so that you end up with something like:
r = [1 1 1 2 2 2]
c = [1 2 3 1 2 3]
Then use those to generate a transposed index for A, which will end up like this:
It = [1 3 5 2 4 6]
After you have that, it should be obvious what to do.
0 Kommentare
Jan
am 21 Mär. 2012
As long as the problem is ill-posed, weird solutions are valid:
B = feval(reshape(['tno'; 'rss'; 'ape'], 1, 9), A);
1 Kommentar
Siehe auch
Kategorien
Mehr zu Matrix Indexing 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!