不止一次,我需要在MATLAB中生成所有可能的两个向量对,我用它来做几个代码行的循环,即
vec1 = 1:4;
vec2 = 1:3;
i = 0;
pairs = zeros([4*3 2]);
for val1 = vec1
for val2 = vec2
i = i + 1;
pairs(i,1) = val1;
pairs(i,2) = val2;
end
end
生成......
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1
4 2
4 3
必须有一个更好的方法来做这个更多的MATLAB'esque?
注: nchoosek
不执行我需要的反转对(即 2 1
以及 1 2
),我不能反转并附加 nchoosek
输出,因为对称对将包含两次 .
7 回答
您可以使用普通的旧矩阵运算,例如在
Edit: 这是Octave语法,MATLAB将如下所示:
在这两种情况下,结果都是
尝试
见MESHGRID documentation . 虽然这不完全是那个功能的用途,但是如果你眯着眼睛看它很有趣,你所要求的就是它的功能 .
你可以用
另一个收集解决方案:
您可以通过使用
repmat
复制矩阵然后使用reshape
将结果转换为列向量来完成此操作 .当然,您可以从上面的示例中删除所有中间变量 .
这里有一个更MATLAB'的方式来找到组合 . 这个也可以很容易地扩展到2个以上的向量(以及非数字组合):
您要找的是cartesian product
cartprod是实现它的函数 . 你可以在线性代数包中找到它,所以你需要这样做: