我有 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 中执行此操作?谢谢!
我有 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 中执行此操作?谢谢!
您基本上需要计算范围向量的所有排列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