如何在Matlab中生成两组的所有双射?

时间:2012-05-03 22:15:48

标签: matlab bijection

我想要做的是在Matlab中以最简单的方式执行以下操作

让我们假设我们有两个数组{1,2,3} {4,5,6}。

该算法应该给我所有的双射:

1-4 2-5 3-6 / 1-4 2-6 3-5 / 1-5 2-4 3-6 / 1-5 2-6 3-4 / 1-6 2-5 3 -4 / 1-6 2-4 3-5

2 个答案:

答案 0 :(得分:2)

这相当于获取第二个数组的所有排列,并且有一个非常方便的函数perms

答案 1 :(得分:1)

按照trutheality和repmat的建议使用perms创建一个3D矩阵,以复制第一个矩阵:

x = [1 2 3];
y = [4 5 6];

Y = perms(y);
X = repmat(x,length(perms(y)),1);

Result = cat(3,X,Y);
NicerResult = permute(Result, [2, 3, 1]);