MATLAB Classifique as matrizes 2D e 3D e acesse através do índice

Vamos dizer que você tem uma matriz 1D

a = rand(1,5);
[sa i] = sort(a);

entãosa ea(i) são os mesmos. No entanto, se o tamanho da matriz aumentar

a = rand(3,4);
[sa i] = sort(a);

entãosa ea(i) não são os mesmos. E o mesmo acontece quando estou tentando classificar uma matriz 3D pela terceira dimensão.

Como posso acessar os valores dea através do índicei? Ou, em outras palavras, como posso calcular osa=a(X), o queX deveria estar

Editar

Obrigado pelas soluções. No entanto, eles não funcionam quando você altera a dimensão para classificar por. No entanto, pego a idéia e a uso para criar uma forma gera

O que o algoritmo está fazendo é criar os índices da matriz. O MATLAB indexa a coluna de células de maneira sábia. Portanto, o índice é dado por

idx = r + (c-1)*ROWS + (p-1)*ROWS*COLS

Onde,idx é o índice,r é a posição da linha,c é a posição da coluna ep é a posição da págin

Portanto, se classificarmos na primeira dimensão (normalsort(a)) o índice do resultado é a posição nas colunas; se classificarmos na segunda dimensão, o índice do resultado será a posição nas linhas; e se classificarmos na terceira dimensão, o índice de resultados será a posição da página. Dito isto, é o último a produzir as linhas e colunas para o caso especificado:

r = repmat((1:rows)',[1 cols pages]);
c = repmat(1:cols,[rows 1 pages]);

A classificação na primeira dimensão é explicada nas soluções fornecidas. Então, vamos classificar na segunda dimensão (linha) de uma matriz bidimensional

a = rand(4,5);
[rows cols pages] = size(a);
R = repmat((1:rows)',[1 cols pages]);
[sa idx] = sort(a,2);
nIdx = R + (idx-1)*rows;
isequal(sa,a(nIdx))

gora, se usarmos a mesma idéia para classificar na terceira dimensão (página), precisamos fazer

a = rand(4,5,3);
[rows cols pages] = size(a);
R = repmat((1:rows)',[1 cols pages]);
C = repmat(1:cols,[rows 1 pages]);
[sa idx] = sort(a,3);
nIdx = R + (C-1)*rows + (idx-1)*rows*cols;
isequal(sa,a(nIdx))

E a mesma lógica pode ser usada para estendê-la a N dimensões. Obrigado pela sua ajuda, você ilumina o caminho. :)

questionAnswers(4)

yourAnswerToTheQuestion