这个问题基本上是that question的扩展。
我在Matlab中有一个矩阵A
,想要沿着一个维度对该矩阵进行排序:
A = rand(3,3,5);
[B idx] = sort(A,3);
现在idx
是一个包含"已排序"的矩阵。指数。如何仅使用A
和B
取回矩阵idx
?
The answer原始问题并不适用于矩阵。
答案 0 :(得分: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))
请注意,为了提高性能,我们可以直接从尺寸参数中获取由sub2ind
或bsxfun
生成的线性索引,从而避免ndgrid
,如此 -
Aout = B(bsxfun(@plus,bsxfun(@plus,(1:m)',m*(0:n-1)),m*n*(dim3idx-1)))