【问题标题】:Sorting every layer of 3D matrix by one column each将 3D 矩阵的每一层按每一列排序
【发布时间】:2015-12-06 15:41:34
【问题描述】:

我有一个 3D 矩阵。说是:A = randi(15,[4,3,2])。我想按升序对每一层的第二列进行排序,但其他列只是留在各自的行中。我怎样才能做到这一点? 如果两层是这样的

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

【问题讨论】:

  • 欢迎来到 StackOverflow!如果对您有帮助,请考虑接受答案。谢谢!

标签: matlab sorting matrix


【解决方案1】:

如果您有图像处理工具箱,使用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

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多