分别对两个3D阵列进行排序

时间:2013-11-27 17:41:57

标签: matlab sorting

人。我无法在我的问题上找到答案。

假设我们有两个3D数组:

A=rand(10,10,3);
B=rand(10,10,3);

然后我们沿着第三个方向排序A:

[sorted_A, idx] = sort(A,3);

我应如何在第二个数组中设置相同的顺序?

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要线性索引,如下所示:

[ii jj ] = ndgrid(1:size(A,1),1:size(A,2));
sorted_B = B(sub2ind(size(A),repmat(ii,[1 1 size(A,3)]),repmat(jj,[1 1 size(A,3)]),idx));

答案 1 :(得分:1)

使用第一个矩阵的排序,您可以获得每种索引的索引。

只做C = B(idx)(为一维数组工作)

修改

这适用于3D矩阵,但此解决方案不是矢量化。

C = zeros(10,10,3);

for dim = 1:3
    for it = 1:10
        for jt = 1:10
            C(it,jt,dim) = B(it,jt,idx(it,jt,dim));
        end
    end
end