“Desort”矩阵。 在Matlab中撤消排序

这个问题基本上是这个问题的延伸。

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

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

现在, idx是包含“排序”索引的矩阵。 我怎样才能找回矩阵A只使用Bidx

不幸的是,原始问题的答案对矩阵不起作用。


您需要对索引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)))
链接地址: http://www.djcxy.com/p/91567.html

上一篇: "Desort" a matrix. Undo a sorting in Matlab

下一篇: Iterate over only public Ruby constants