2013-11-27 3 views
0

Люди. Я не смог найти ответ на мой вопрос.Соответствующая сортировка двух 3D-массивов

Допустим, у нас есть два 3D массива:

A=rand(10,10,3); 
B=rand(10,10,3); 

Тогда сортировать по 3 Demension:

[sorted_A, idx] = sort(A,3); 

Как я должен действовать, чтобы установить такой же порядок во втором массиве?

Спасибо!

ответ

2

Вам необходимо линейную индексацию, например:

[ii jj ] = ndgrid(1:size(A,1),1:size(A,2)); 
sorted_B = B(sub2ind(size(A),repmat(ii,[1 1 size(A,3)]),repmat(jj,[1 1 size(A,3)]),idx)); 
+0

Спасибо @ Luis Mendo, этот пример мне тоже поможет. У меня есть что-то подобное для работы :) – Vuwox

+0

@AlexandreBizeau Я рад этому! –

+0

@ LuisMendo, это было потрясающе! Благодаря! –

1

С сортировкой по первой матрице вы получаете индекс каждого вида.

Вобще C = B(idx) (Работа для 1D массив)

EDIT

Это для 3D-матрицы, но это решение не векторизации.

C = zeros(10,10,3); 

for dim = 1:3 
    for it = 1:10 
     for jt = 1:10 
      C(it,jt,dim) = B(it,jt,idx(it,jt,dim)); 
     end 
    end 
end 
+0

Ваше решение будет работать только с 1D массив. –

+0

Да, я понимаю. Сейчас я работал над 3D-сортировкой. – Vuwox

+0

Извините, я вас не понял. Вы говорите, что ваше решение работает на вас? –

Смежные вопросы