0

我有 2 个向量:

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

我想找到 A 和 B 之间所有不同的单射映射,即结果应该是这样的:

1 3     1 4     1 5     1 3     1 4     1 5
2 4     2 3     2 3     2 5     2 5     2 4
  5       5       4       4       3       3

有没有人建议如何在 MATLAB 中执行此操作?谢谢!

4

1 回答 1

1

您基本上需要计算范围向量的所有排列B

perms(B).'

这将给出您想要的结果的第二列。第一列只是你的域向量转置,A.'


要存储映射,您可以只保留每第二列的前n行,其中n是 的长度A。由于可能有重复,请使用unique;删除它们。

aux = perms(B);
mappings = unique(aux(:,1:length(A)),'rows').';

因此,mappings(i,j)是通过第j个映射的第i个元素的图像。A


要以您发布的格式显示结果,您只需要reshape稍微交错映射的域和范围:

>> reshape([repmat(A.',1,size(mappings,2)); mappings],length(A),[])

ans =
     1     5     1     5     1     4     1     4     1     3     1     3
     2     4     2     3     2     5     2     3     2     4     2     5
于 2013-10-11T10:41:03.520 回答