More than once now I have needed to generate all possible pairs of two vectors in MATLAB which I do with for loops which take up a fair few lines of code i.e.
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
Generates ...
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1
4 2
4 3
There must be a better way to do this which is more MATLAB'esque?
n.b. nchoosek
does not do the reversed pairs which is what I need (i.e. 2 1
as well as 1 2
), I can't just reverse and append the nchoosek
output because the symmetric pairs will be included twice.