获取 MATLAB 中排列的映射



假设我有两个数组,其中一个是另一个数组的排列:

A = [2 1 5 3 7]
B = [7 2 1 3 5]

在任一数组中都没有重复。

如何获取两者之间的排列映射?

例如 A->B应该是:

[2, 3, 5, 4, 1]

这意味着:

A(1) -> B(2)
A(2) -> B(3)
A(3) -> B(5)
A(4) -> B(4)
A(5) -> B(1)

更新:

有没有不使用ismember快速矢量化解决方案?根据我的经验,对于非常大的数组,ismember往往很慢。

这个怎么样:

[i a] = sort(A);
[i b] = sort(B);
mapping = b(a)

使用 ismember .

[~,idx] = ismember(A,B);

向量idx将包含索引,以便 B(idx) == A .

请注意,ismember找到最高的索引。

您也可以使用 knnsearch,但对于 a 和 b 中不重复的成员

试试这个:

for i=1:size(B)
C(:,i) = [i find(B==A(i))]
end

最新更新