如何在维矩阵上排序后获取元素

时间:2019-03-25 17:39:15

标签: matlab sorting

我有两个矩阵A和B,并且希望使用A的第3维对两个矩阵进行排序。为此,我使用sort来获取结果和索引。

我不知道如何使用索引来获取矩阵B上的排序数据。

A = rand(2,2,2) B = rand(2,2,2) [S I] = sort(A, 3); S B(I) % Here, don't sort B according to the same sort than A

2 个答案:

答案 0 :(得分:0)

使用以下方法将三维下标转换为线性索引:

[r, c, ~] = size(A);
LinInd = (I-1)*r*c + reshape(1:r*c, r, c);  %For >=R2016b
%LinInd = bsxfun(@plus, (I-1)*r*c, reshape(1:r*c, r, c));   %For <R2016b

现在使用这些线性索引对B进行排序,即:

B(LinInd)

答案 1 :(得分:0)

正如Sardar Usama指出的,关键是将3维索引转换为线性索引。在Matlab中执行此操作的正确函数是sub2ind。这并不简单:

/text()