我有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中执行此操作?谢谢!
答案 0 :(得分:1)
您基本上需要计算范围向量B
的所有排列:
perms(B).'
这将为您提供所需结果的第二列。第一列只是您的域向量转置,A.'
要存储映射,您可以保留 n 每个第二列的第一行,其中 n 是A
的长度。由于可能会重复,因此请使用unique
;
aux = perms(B);
mappings = unique(aux(:,1:length(A)),'rows').';
因此,mappings(i,j)
是A
通过 j -th映射的 i -th元素的图像。
要以您发布的格式显示结果,您只需要使用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