Need help - How to generate predefined subsets?
Afficher commentaires plus anciens
All:
I have a 5 X 4 matrix defined as
v = [
1 2 3 4;
5 6 7 8 ;
9 10 11 12;
13 14 15 16;
17 18 19 20];
I need to write a code to generate all possible unique combinations of a group of 4 elements. The group needs to contain 1 element from each column. For example:
C1 = 1 2 3 4
C2 = 1 6 7 8
C3 = 1 14 19 20
...
Any help will be greatly appreciated.
Réponses (2)
the cyclist
le 12 Juil 2012
Modifié(e) : the cyclist
le 12 Juil 2012
Here's one way. There might be better ones.
Download this code from the File Exchange:
Then run this code:
v = [1 2 3 4;
5 6 7 8 ;
9 10 11 12;
13 14 15 16;
17 18 19 20];
arrayOfIndices = combinator(5,4);
C = [v(arrayOfIndices(:,1),1), ...
v(arrayOfIndices(:,2),2), ...
v(arrayOfIndices(:,3),3), ...
v(arrayOfIndices(:,4),4)];
This will put all the combinations into one 625 X 4 array, C.
Teja Muppirala
le 12 Juil 2012
Another idea:
[C1,C2,C3,C4] = ndgrid(1:5);
allCombinations = [v(C1,1) v(C2,2) v(C3,3) v(C4,4)]
Or a more flexible way, which will work for any sized v:
[nRows, nCols] = size(v);
C = cell(1,nCols);
[C{:}] = ndgrid(1:nRows);
C = cell2mat(cellfun(@(x)x(:),C,'uniform',0));
C = bsxfun(@plus, C,nRows*(0:nCols-1) );
allCombinations = v(C)
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!