3

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

最小元素大小为 1。

如果M = 3, 和L = 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

我不确定循环中间应该做什么,任何帮助将不胜感激!

4

1 回答 1

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
于 2012-11-11T17:45:07.123 回答