假设我有两个数组,其中一个是另一个数组的排列:
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