在matlab中我该怎么做?我有一组 n 个元素
从这个集合中,我制作了一组新的 n/2 对,以便不同对中的元素是不同的。如何从 matlab 中的 n 个元素生成不同的 n/2 对集合?
例如输入集 - {1,2,3,4}
可能的输出集 -
{{1,2},{3,4}}
{{1,3},{2,4}}
{{1,4},{2,3}}
在matlab中我该怎么做?我有一组 n 个元素
从这个集合中,我制作了一组新的 n/2 对,以便不同对中的元素是不同的。如何从 matlab 中的 n 个元素生成不同的 n/2 对集合?
例如输入集 - {1,2,3,4}
可能的输出集 -
{{1,2},{3,4}}
{{1,3},{2,4}}
{{1,4},{2,3}}
对于“每个减半向量的不同元素”要求,我找不到一个干净的解决方案。因此,我建议单独检查每个结果。我希望有一个更好的解决方案:这个只是完成它的工作。
x = [1 2 3 3];
xsize = size(x,2);
p = perms(x);
up = unique(p,'rows');
result = [];
for entry=up'
left = entry(1:xsize/2);
right = entry(xsize/2+1:xsize);
if numel(unique(left)) == xsize/2 && numel(unique(right)) == xsize/2
result = vertcat(result,entry')
end
end
只是为了完整性,结果是:
1 3 2 3
1 3 3 2
2 3 1 3
2 3 3 1
3 1 2 3
3 1 3 2
3 2 1 3
3 2 3 1
我不确定您是否需要实际拆分减半的向量。left
在这种情况下,只需放入right
您喜欢的任何东西。