2013-08-17 5 views
-2

Сайте, у меня есть два вектора [A B C] и [E F G]генерация последовательности из двух векторов в MATLAB

Теперь я хочу, матрица, как этот ниже:

[A B C; E F G ; A F G; A F C; E B C; E B G] 
+1

Просьба представить некоторые подробности и примеры того, что вы пробовали до сих пор. – BartoszKP

+0

Какой класс A, B, ...? Дубли, символы, ...? Кроме того, являются ли они скалярными? – Oleg

+1

похоже, что вы делаете * декартово произведение * (хотя вам не хватает некоторых комбинаций: ABG, EFC). См. Следующее: http://stackoverflow.com/questions/4165859/matlab-generate-all-possible-combinations-of-the-elements-of-some-vectors – Amro

ответ

1

Вот это same code я упомянул для Cartesian product, адаптированное работать над наборами строк, вместо числовых данных:

sets = {{'A' 'E'}; % first position 
     {'B' 'F'}; % second position 
     {'C' 'G'}}; % third position 

[val,~,idx] = cellfun(@unique, sets, 'Uniform',false); 
indices = cell(numel(idx),1); 
[indices{:}] = ndgrid(idx{:}); 
cartProd = cellfun(@(ind,v) v(ind(:)), indices, val, 'Uniform',false); 
cartProd = vertcat(cartProd{:})'; 

Это будет работать для любого количества наборов, каждый с любым числом элементы.

В результате комбинации для примера выше (по одному в строке):

>> cartProd 
cartProd = 
    'A' 'B' 'C' 
    'E' 'B' 'C' 
    'A' 'F' 'C' 
    'E' 'F' 'C' 
    'A' 'B' 'G' 
    'E' 'B' 'G' 
    'A' 'F' 'G' 
    'E' 'F' 'G' 

 Смежные вопросы

  • Нет связанных вопросов^_^