"Desort"矩阵.在Matlab中撤消排序

Eth*_*xxx 7 sorting matlab matrix

这个问题基本上是一个扩展了这个问题.

A在Matlab中有一个矩阵,想要沿着一个维度对该矩阵进行排序:

A = rand(3,3,5); [B idx] = sort(A,3);

现在idx是一个包含"已排序"索引的矩阵.我怎样才能A使用B和取回矩阵idx

遗憾的是,原始问题的答案对矩阵不起作用.

Div*_*kar 4

您需要对索引进行排序idx才能返回原始索引。其余的工作将涉及获取与所有这些 dim-3 索引相对应的格式化行索引和列索引。实现看起来像这样 -

[~,dim3idx] = sort(idx,3);

[m,n,r] = size(B);
[rowidx,colidx,~] = ndgrid(1:m,1:n,1:r);

Aout = B(sub2ind(size(B),rowidx,colidx,dim3idx))
Run Code Online (Sandbox Code Playgroud)

请注意,为了提高性能,可以直接从尺寸参数中获取由sub2ind或生成的线性索引,从而也可以避免,如下所示 -bsxfunndgrid

Aout = B(bsxfun(@plus,bsxfun(@plus,(1:m)',m*(0:n-1)),m*n*(dim3idx-1)))
Run Code Online (Sandbox Code Playgroud)