人。我无法在我的问题上找到答案。
假设我们有两个3D数组:
A=rand(10,10,3);
B=rand(10,10,3);
然后我们沿着第三个方向排序A:
[sorted_A, idx] = sort(A,3);
我应如何在第二个数组中设置相同的顺序?
谢谢!
答案 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