Generate all possible combinations of a few numbers when the internal order doesn’t matter and the length varies?
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Peta
am 22 Jan. 2016
Bearbeitet: Kirby Fears
am 22 Jan. 2016
Say I have three numbers: 1, 2 and 3 that I want to generate all possible combinations from, but the order in which they occur doesn’t matter. So for this example, using 1 2 3, this is what I want to generate:
1
1 2
1 2 3
2
2 3
1 3
3
The only combination generating function I know would be perms(1:3), but that would create:
3 2 1
3 1 2
2 3 1
2 1 3
1 2 3
1 3 2
In my situation the internal order in which the number occurs does not matter, so 1 2 means the same thing to me as 2 1 which should require fewer combinations.
Is there a command to generate sequences like this?
Thanks
0 Kommentare
Akzeptierte Antwort
Kirby Fears
am 22 Jan. 2016
Bearbeitet: Kirby Fears
am 22 Jan. 2016
You're asking for the power set of your data. Careful not to use large arrays since the calculation will get out of hand rather quickly.
dataSet = [1 2 3];
n = numel(dataSet);
%idx = dec2bin(0:2^n-1,n)=='1'; % this is the whole power set
idx = dec2bin(1:2^n-2,n)=='1'; % this is nonempty proper subsets only
S = cell(size(idx,1),1);
for s = 1:size(idx,1),
S{s} = dataSet(idx(s,:));
end
Hope this helps.
2 Kommentare
Kirby Fears
am 22 Jan. 2016
Bearbeitet: Kirby Fears
am 22 Jan. 2016
You can't have blanks in a numeric array. You can have NaNs in the "blank" spaces though. I'd encourage you to work with the cells approach above. Just in case, here's an approach with NaNs in the empty positions:
dataSet = [1 2 3];
n = numel(dataSet);
%idx = dec2bin(0:2^n-1,n)=='1'; % this is the whole power set
idx = dec2bin(1:2^n-2,n)=='1'; % this is nonempty proper subsets only
S = NaN(size(idx));
for s = 1:size(idx,1),
S(s,idx(s,:)) = dataSet(idx(s,:));
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!