在MATLAB中获取排列的映射

Ame*_*ina 7 matlab

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

A = [2 1 5 3 7]
B = [7 2 1 3 5]
Run Code Online (Sandbox Code Playgroud)

两个阵列都没有重复.

如何获得两者之间的置换映射?

例如A->B应该是:

[2, 3, 5, 4, 1]
Run Code Online (Sandbox Code Playgroud)

意思是:

A(1) -> B(2)
A(2) -> B(3)
A(3) -> B(5)
A(4) -> B(4)
A(5) -> B(1)
Run Code Online (Sandbox Code Playgroud)

更新:

有没有使用的快速矢量化解决方案ismember?根据我的经验,ismember对于非常大的阵列来说往往很慢.

Nat*_*ate 17

这个怎么样:

[i a] = sort(A);
[i b] = sort(B);
mapping = b(a)
Run Code Online (Sandbox Code Playgroud)


rev*_*nge 6

使用ismember.

[~,idx] = ismember(A,B);
Run Code Online (Sandbox Code Playgroud)

向量idx将包含这样的索引B(idx) == A.

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