I need to compute the n-fold Cartesian product of a set, where n is a positive integer determined by some previous code. Is there any way to do this without using nested for-loops? ndgrid seems to be optimal for a fixed n, but I'm unable to find a solution for any general n. Thanks.

 Respuesta aceptada

John D'Errico
John D'Errico el 5 de Mayo de 2016

1 voto

For example:
S = 1:3;
n = 5;
q = cell(1,5);
s = repmat({S},1,n);
[Q{1:n}] = ndgrid(s{:});
Q = reshape(cat(n,Q{:}),[],n);
I'm not sure if that solution is a trivial one. Trivial is all in the eyes of the beholder anyway. To be honest, I've written a function in one of my toolboxes that does it for me, rather than have to remember this trick when I need it.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 5 de Mayo de 2016

Comentada:

el 6 de Mayo de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by