Мне не раз приходилось генерировать все возможные пары двух векторов в MATLAB, которые я делаю для циклов, которые занимают несколько строк кода 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
Создает...
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?
n.b. nchoosek
не выполняет обратные пары, которые мне нужны (т.е. 2 1
, а также 1 2
), я не могу просто отменить и добавить вывод nchoosek
, потому что симметричные пары будут включены дважды.