会有很多。通常当这里的一个问题涉及到:我如何生成所有可能的X,真正的答案是:不要这样做,有太多可能的X。为您的问题寻找不同的方法。
不过,您可以在行数的基础上使用数字表示:
方法使用:dec2base
免责声明:由于dec2base 的限制,这仅适用于2<=rows<=36(希望足够了。否则我们将复制编辑文件dec2base.m 并删除它的最后两行和@ 行中的错误检查987654325@ 实现2<=rows 的任意值。出于版权原因,我不会发布此代码。)。
rows = 5;
cols = 6;
assert((2<=rows)&&(rows<=36),'The dec2base-approach will only work for 2<=rows<=36');
symbols = dec2base(0:rows-1, rows, 1);
for ii = 0:rows^cols-1
% Compute ii in base rows.
iibR = dec2base(ii, rows, cols);
C = bsxfun(@eq, symbols, iibR);
disp(C);
end
生成没有dec2base的元组:
我们还可以使用ndgrid 生成这些表示我们数字的元组。
%%// Data
rows = 3;
cols = 4;
%%// Compute all k-tuples of numbers 1:n
n = rows;
k = cols;
Cs = cell(1,k);
[Cs{:}] = ndgrid(1:n);
tuples = reshape(cat(n+1, Cs{:}),n^k,[]);
%%// Compute matrices
for ii = 1:size(tuples,1);
C = bsxfun(@eq, (1:rows).', tuples(ii,:));
disp(C);
end