如何使用矢量化代码在MATLAB中从两个向量生成所有对?

Bre*_*dan 46 matlab combinations

不止一次,我需要在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
Run Code Online (Sandbox Code Playgroud)

生成......

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1 
4 2
4 3
Run Code Online (Sandbox Code Playgroud)

必须有一个更好的方法来做这个更多的MATLAB'esque?

NB nchoosek没有做反向双这是我需要的东西(即2 11 2),我不能只是扭转和追加nchoosek输出,因为对称对将被包含两次.

Lam*_*eek 92

尝试

[p,q] = meshgrid(vec1, vec2);
pairs = [p(:) q(:)];
Run Code Online (Sandbox Code Playgroud)

请参阅MESHGRID文档.虽然这不完全是那个功能的用途,但是如果你眯着眼睛看它很有趣,你所要求的就是它的功能.

  • 太精彩了。我知道“meshgrid”和二维向量的序列化,但从未考虑过以这种方式使用它们。 (2认同)

efi*_*ida 12

你可以用

a = 1:4;
b = 1:3;
result = combvec(a,b);
result = result'
Run Code Online (Sandbox Code Playgroud)

  • @neuronet 我知道这是一个迟到的答复,但值得未来的访问者知道,与大向量的公认解决方案相比,这“非常”慢。 (2认同)