MATLAB Answers

Best way to sort a 3-d matrix by one column?

조회 수: 43(최근 30일)
Emily Hokett
Emily Hokett 11 Oct 2018
답변: Guillaume 15 Oct 2018
Hi, I'd like to sort a 3 d matrix by the values in one column. I have a 204 x 33 x 9 matrix, and I'd like to sort the rows by the 33rd column of the second dimension. Thanks, Emily

  댓글 수: 2

Guillaume
Guillaume 11 Oct 2018
Should each page be sorted separately or should it just be considered flattened into 2d? A short example of input/desired output would be useful.
Emily Hokett
Emily Hokett 15 Oct 2018
Each page would sorted separately by the 33rd column so that it's still a 3-d matrix, just the rows would be sorted by the values in the 33rd column.

댓글을 달려면 로그인하십시오.

답변(2개)

gonzalo Mier
gonzalo Mier 11 Oct 2018
I am not sure if this is what you want:
matrix(:,33,2) = sort(matrix(:,33,2));

  댓글 수: 3

Emily Hokett
Emily Hokett 11 Oct 2018
Thanks for the response. I'm new to Matlab, so forgive me if I explain this awkwardly. I have a 3D matrix with 204 rows, 33 columns, and 9 pages. I want to sort the matrix by the 33rd column. Let me know if this makes sense. Thanks
gonzalo Mier
gonzalo Mier 11 Oct 2018
Can you put an example of what you want?
Emily Hokett
Emily Hokett 15 Oct 2018
Okay, I just want to now if it's possible to somehow use sortrows for a 3-d matrix. If I have 204 rows, 33 columns, and 9 pages, could I sort the 204 rows by the values in the 33rd column and do this for all 9 pages?

댓글을 달려면 로그인하십시오.


Guillaume
Guillaume 15 Oct 2018
You can't use sortrows on a 3D matrix. You have two options:
  • Use a loop and use sortrows on the pages:
for page = 1:size(yourmatrix, 3)
yourmatrix(:, :, page) = sortrows(yourmatrix(:, :, page), 33);
end
  • Use sort and some sub2ind magic to sort everything at once. I'm not sure it'll be faster than the loop:
[~, roworder] = sort(yourmatrix(:, 33, :));
sortedmatrix = yourmatrix(sub2ind(size(yourmatrix), ...
repmat(roworder, 1, size(yourmatrix, 2), 1), ...
repmat(1:size(yourmatrix, 2), size(yourmatrix, 1), 1, size(yourmatrix, 3)), ...
repmat(permute(1:size(yourmatrix, 3), [1 3 2]), size(yourmatrix, 1), size(yourmatrix, 2), 1)));

  댓글 수: 0

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by