sorting 3d matrix by value of a cell

조회 수: 4 (최근 30일)
Markus
Markus 2011년 11월 14일
hei,
i have a 3d matrix, where each layer into the 3rd dimension is a new measurement. the value in one cell however gives me the distance. now i would like to sort these layer by this cell (distance).
this is possible within a 2d matrix with the function 'sortrows'.
thanks for help ;-) markus

채택된 답변

Laura Proctor
Laura Proctor 2011년 11월 14일
From what I understand, you just want to sort by an element on each page in the 3D array - this is how you can do it:
A = randi(10,[4,4,4])
[~,idx] = sort(A,3); % sort by the page
iv = zeros(1,size(A,3)); % set up the indexing vector
iv(:) = idx(1,1,:); % find the ordering of the (1,1)
% element by which to sort A
B = A(:,:,iv) % sort A according to the (1,1)
% element of each page
  댓글 수: 2
Markus
Markus 2011년 11월 14일
hei laura,
thanks for your answer. if i read your code right, you sorted the pages by cell (1,1,:) which is the same position in A and idx.
;-) markus
Laura Proctor
Laura Proctor 2011년 11월 14일
You got it!

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

추가 답변 (1개)

Sven
Sven 2011년 11월 14일
Hi Markus,
If you have a 3D MATRIX of numbers, and the distance you want to sort by is stored, say, in the (1,1) location of each slice in the third dimension, try:
A = rand(5,5,10);
[~,sortOrder] = sort(A(1,1,:),3);
A_sorted = A(:,:,sortOrder);
If you have a 3D CELL of numbers, read below:
Unfortunately when passing a cell to sort(), it expects that cell to be a cell of strings. The only way to sort numeric data in a cell is to convert it to a matrix, as below:
Let's first make your data into a cell (I'm only including "distance"... I presume since your data is in a cell to start with then there's a good reason you didn't store it as a vector of distances):
distanceCell = num2cell(rand(1,1,20))
We then just make a vector from only the numeric values in the cell
distancesVector = cat(1,distanceCell{1,1,:});
Then we sort that vector and reorder the cell accordingly.
[~, sortOrder] = sort(distancesVector);
sortedCell = distanceCell(:,:,sortOrder);
  댓글 수: 3
Markus
Markus 2011년 11월 14일
aehm, i also accept your answer .. :) but i read laura first.
Sven
Sven 2011년 11월 14일
Aha, no problems Markus

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

카테고리

Help CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by