Matlab 使用向量集/向量对生成组合矩阵
我想从一组向量中找出所有元素的组合。我发现以下方法非常有效。然而,我的一些向量是成对的。例如,如果我有向量Matlab 使用向量集/向量对生成组合矩阵,matlab,Matlab,我想从一组向量中找出所有元素的组合。我发现以下方法非常有效。然而,我的一些向量是成对的。例如,如果我有向量[15,20]和[60,70],我只想得到组合[15,60]和[20,70](因为15不能与70组合) 因此,对于以下向量: vectors = {[1 2], [3 6 9], [10 20 30]} % [3 6 9] and [10 20 30] are paired ,应给予 combs = [ 1 3 10 1 6 20
[15,20]
和[60,70]
,我只想得到组合[15,60]
和[20,70]
(因为15
不能与70
组合)
因此,对于以下向量:
vectors = {[1 2], [3 6 9], [10 20 30]} % [3 6 9] and [10 20 30] are paired
,应给予
combs = [ 1 3 10
1 6 20
1 9 30
2 3 10
2 6 20
2 9 30 ]
对于这个简单的示例,我可以通过使用vectors={[1 2],[3 6 9]}
并通过连接生成第三列来使用链接中的组合代码:
combs = [combs, repmat([10 20 30], 1, size(combs, 1)/size([10 20 30], 2))'];
然而,我的案例并不是那么简单。例如,我希望有一个适用于向量的代码:
vectors = {[1 2], [3 6 9], [10 20 30], [3 4 5], [55 66 77], [555 666 777], [101 201]}
% [3 6 9] and [10 20 30] are a pair.
% [55 66 77] and [555 666 777] are a pair.
首先需要定义哪些向量是“链接的”。以你为例,
vectors = {[1 2] [3 6 9] [10 20 30] [3 4 5] [55 66 77] [555 666 777] [101 201]};
linked = [1 2 2 3 4 4 5]; %// equal numbers mean those vectors are linked
然后,您可以对参考答案稍加修改:
vectors = {[1 2], [3 6 9], [10 20 30], [3 4 5]};
linked = [1 2 2 3];
产生
1 3 10 3
1 3 10 4
1 3 10 5
1 6 20 3
1 6 20 4
1 6 20 5
1 9 30 3
1 9 30 4
1 9 30 5
2 3 10 3
2 3 10 4
2 3 10 5
2 6 20 3
2 6 20 4
2 6 20 5
2 9 30 3
2 9 30 4
2 9 30 5
那很好用!感谢您根据其他答案给出解决方案@事实上,我很容易概括出自己的答案:——)
1 3 10 3
1 3 10 4
1 3 10 5
1 6 20 3
1 6 20 4
1 6 20 5
1 9 30 3
1 9 30 4
1 9 30 5
2 3 10 3
2 3 10 4
2 3 10 5
2 6 20 3
2 6 20 4
2 6 20 5
2 9 30 3
2 9 30 4
2 9 30 5