sorting 3d matrix by value of a cell

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일

1 개 추천

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일

1 개 추천

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일
it is the first case. thats what i needed!! thanks..
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

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

카테고리

도움말 센터File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

질문:

2011년 11월 14일

Community Treasure Hunt

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

Start Hunting!

Translated by