Borrar filtros
Borrar filtros

How to obtain all possible combinations from a set of values without nested for loops ?

3 visualizaciones (últimos 30 días)
Hi people! I wanted to know if there is an elegant and general approach to generate all possible vectors of a given length where the components are being taken from a known set of values. In my example I have:
set={-1,0,1}; %set of possible values for vector components
n=10; % length of vector
A possible combination for a vector could be
[0,0,0,0,0,0,0,0,0,0]
or
[0,0,0,0,0,0,0,0,0,1]
or
[1,0,0,0,0,0,0,0,0,-1]
So there are 3^10=59049 possible combinations for the components of the vector. I would like to have a method where my result is a 59049-by-10 matrix, each row being a unique combination of the values {-1,0,1}.
The only way I found is extremly inefficient and not parametric, simply nesting 10 for loops, so I would be really thankful for a "real" method. I already tried different matlab functions such as combvec, combnk, but they didn't do what I wanted. Maybe I just used them wrongly.

Respuesta aceptada

Matt J
Matt J el 29 de Ag. de 2017
Editada: Matt J el 29 de Ag. de 2017
n=10;
[combs{1:n}]=ndgrid([-1,0,1]);
result=reshape( cat(n+1,combs{:}) ,[],n);
  6 comentarios
Matt J
Matt J el 25 de Ag. de 2020
I think the loop-free approach in my last comment would be faster, if that matters...

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Characters and Strings en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by