File Exchange

## combinations

version 1.0.0.1 (3.03 KB) by
Returns combinations of a set of numeric or cell vectors (uses a memory-efficient algorithm)

3 Downloads

Updated 01 Sep 2016

View License

C = COMBINATIONS(V1, V2, V3, ...Vn) returns the set of combinations formed by taking the first element from vector V1, the second element from vector V2, the third from vector V3, and so on.
C is a KxN matrix, where K is the total
number of combinations, and N is the number
of (non-empty) input vectors.

V1, V2, ... Vn can be either numeric or cell arrays.

C = COMBINATIONS(V1, V2, V3, ...Vn, CLASSNAME) specifies that all the numeric vectors have numeric type CLASSNAME (e.g., 'int8', 'single').

Examples:

c = combinations(1:5, 1:2)
c = combinations(1:5, 1:2, 'int8')
c = combinations(0:1,0:1,0:1,0:1,0:1,0:1,0:1,0:1,0:1,'int8');

c = combinations({'aa','bb'}, 1:3)
c = combinations({'aa','bb'}, {[1 2] [4 5 6]}, [true false])

----------------
MOTIVATION (in the spirit of reducing FileEx redundancy and clutter)

There are other FileExchange entries for calculating combinations:
ALLCOMB (Filex# 10064)
SETPROD (FileEx# 5898)
CARTPROD (FileEx# 5475)

This implementation differs in two ways.

1) It allows combination of arbitrary cell arrays, and mixtures of cell and numeric arrays.

2) It use a memory-efficient algorithm that does not use intermediate matrices; furthermore, when CLASSNAME is specified, the specified numeric datatype is used consistently (there is no internal conversion from 'double'). This efficiency is relevant when the input consists of many small vectors or a few very large vectors.

### Cite As

Gautam Vallabha (2021). combinations (https://www.mathworks.com/matlabcentral/fileexchange/23080-combinations), MATLAB Central File Exchange. Retrieved .

### Comments and Ratings (4)

John BG

Hi,

I need to find all permutations of alphabet ['a' 'b' .. 'y' 'z'] 26 characters.

your function combinations.m is great for small vectors but
when attempting

combinations([1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26],[1:26])

I get the following error:

Error using zeros
Maximum variable size allowed by the program is exceeded.
Error in combinations (line 141)
out = zeros(numRows, numVars, numericClass);

I tried

digits(30)

and input

vpa([1:26],30)

but get same error, probably because the zeros() function does
not generate such large start matrix

Can you make your function work with figures as large as

vpa(factorial(26),30)
= 403291461126605650322784256.0

Thanks in advance for time and attention
awaiting answer

John
jgb2012@sky.com

Carsten

Exactly what I needed!

Gautam Vallabha

Germán, Your comment is rather cryptic. Can you elaborate? Also, search the FileExchange for "combinations nchoosek". Some of the existing entries, like COMBINATOR (#24325), may fit your requirement.

GERMÁN

NEED possible combinations of GROUPS OF 16 DIGITS [ a b c ! l t s 0 1 e o i]

##### MATLAB Release Compatibility
Created with R14
Compatible with any release
##### Platform Compatibility
Windows macOS Linux
##### Acknowledgements

Inspired: VChooseK

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!