【问题标题】:"Desort" a matrix. Undo a sorting in Matlab“对”矩阵进行“分解”。在 Matlab 中撤消排序
【发布时间】:2016-05-03 08:25:23
【问题描述】:

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

我在 Matlab 中有一个矩阵 A,我想对该矩阵进行一维排序:

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

现在idx 是一个包含“排序”索引的矩阵。如何仅使用 Bidx 取回矩阵 A

不幸的是,原始问题的The answer 不适用于矩阵。

【问题讨论】:

  • 你试过w(ix,:)=v,其中:代表“忽略”维度吗?
  • 你的意思是在我的情况下是这样的:w(:,:,idx) = B?由于“下标分配维度不匹配”,这不起作用。
  • w(idx)=B 有效,但不正确

标签: matlab sorting matrix


【解决方案1】:

您需要对索引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))

请注意,出于性能考虑,可以直接从大小参数中获取sub2indbsxfun 生成的线性索引,因此也可以避免ndgrid,就像这样 -

Aout = B(bsxfun(@plus,bsxfun(@plus,(1:m)',m*(0:n-1)),m*n*(dim3idx-1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多