2015-12-06 2 views
2

У меня есть 3D-матрица. Скажем, это: A = randi(15,[4,3,2]). Я хочу отсортировать второй столбец каждого слоя в порядке возрастания, но остальные столбцы просто остались в соответствующих строках. Как я могу это сделать? Если два слоя, как этотСортировка каждого слоя 3D-матрицы по одному столбцу каждый

val(:,:,1) = 

6 12 13 
10 14  8 
15  8  2 
4  3 14 


val(:,:,2) = 

10  1  8 
2 15 12 
14 11  1 
1  6 11 

Тогда я хочу результат, как этот

val(:,:,1) = 
4  3 14 
15  8  2 
6 12 13 
10 14  8 

val(:,:,2) = 
10  1  8 
1  6 11 
14 11  1 
2 15 12 
+0

Добро пожаловать в StackOverflow! Пожалуйста, подумайте о том, чтобы принять ответ, если это вам помогло. Спасибо! – thewaywewalk

ответ

1

Если у вас есть изображение Processing Toolbox, используя blockproc одно решение:

val(:,:,1) = [ ... 
6 12 13 
10 14  8 
15  8  2 
4  3 14] 


val(:,:,2) = [ ... 
10  1  8 
2 15 12 
14 11  1 
1  6 11] 


%// row indices to used for sorting 
rowidx = 2; 


[n,m,p] = size(val); 

%// get a 2D matrix 
val2D = reshape(val, n, [], 1) 

%// sorting 
out2D = blockproc(val2D,[n,m],@(x) sortrows(x.data,rowidx)) 

%// transform back to 3D 
out3D = reshape(out2D, n, m, []) 

Без инструмента, возможно, немного медленнее:

temp = arrayfun(@(x) sortrows(val(:,:,x),rowidx),1:size(val,3),'uni',0) 
out3D = cat(3,temp{:}) 

out3D(:,:,1) = 

    4  3 14 
    15  8  2 
    6 12 13 
    10 14  8 


out3D(:,:,2) = 

    10  1  8 
    1  6 11 
    14 11  1 
    2 15 12 
Смежные вопросы