2012-11-11 4 views
3

Je souhaite générer tous les tableaux d'entiers possibles d'une longueur donnée L, jusqu'à une taille d'élément maximale M.Générer tous les tableaux d'entiers possibles

La taille minimale de l'élément est 1.

Si M = 3 et L = 2, la sortie serait la suivante:

[1,1] 
[1,2] 
[1,3] 
[2,1] 
[2,2] 
[2,3] 
[3,1] 
[3,2] 
[3,3] 

Il y a M^L combinaisons différentes, donc je suppose que le code Matlab ressemblerait à quelque chose comme ceci:

function [arrays] = allArrays(M,L) 
    for i = 1:(M^L) 
    arrays(i) = % Something here that translates i to the desired array. 
    end 
end 

Je ne suis pas sûr de ce qui devrait aller dans le milieu de la boucle, toute aide serait muc h apprécié!

+0

Vous besoin de toutes les * permutations * possibles, mais le code pour les combinaisons est aussi simple s 'combntns (1: 3,2)' –

+0

@Asad: pour lequel vous avez besoin de la boîte à outils de cartographie ... –

Répondre

7

Vous devez utiliser ndgrid:

[y x]=ndgrid(1:3,1:3); 
resu=[y(:) x(:)]; 

Si vous voulez donner M et L comme entrée, vous devez faire l'astuce suivante:

arg=repmat((1:M)',1,L); 
arg=mat2cell(arg,M,ones(1,L)); 
resu=cell(1,L); 
[resu{:}]=ndgrid(arg{:}); 
resu=cell2mat(cellfun(@(x) x(:), resu,'UniformOutput',0)); 

Résultat:

resu = 
    1  1 
    2  1 
    3  1 
    1  2 
    2  2 
    3  2 
    1  3 
    2  3 
    3  3 
+0

Parfait - merci! :) – Jack

Questions connexes