2012-11-11 27 views
3

我想生成一个给定的长度L的所有可能的整数数组,直到最大元素大小M生成所有可能的整数数组

的最小单元尺寸为1

如果M = 3L = 2,输出将是如下:

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

M^L不同的组合,所以我想了Matlab代码看起来像这样:

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

我不知道什么应该在循环中,什么帮助将muc h非常感谢!

+0

你需要所有可能的*置换*,但组合的代码非常简单(idm习语)combntns(1:3,2)' –

+0

@Asad:在您需要的映射工具箱... –

回答

7

你应该使用ndgrid

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

如果你想给ML作为输入,你应该做到以下几点诀窍:

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)); 

结果:

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

完美 - 谢谢! :) – Jack