Arrays MATLAB:仅用一个'生成二进制矩阵的所有可能组合;1';每列
MATLAB:我想了解如何生成矩阵(N乘以M)的所有可能组合,其中: -元素为“1”和“0”。 -每列中应该只有一个“1”。 -对行没有限制。因此每行中允许有多个“1” 一种可能的状态,例如N=5,M=6Arrays MATLAB:仅用一个'生成二进制矩阵的所有可能组合;1';每列,arrays,matlab,matrix,Arrays,Matlab,Matrix,MATLAB:我想了解如何生成矩阵(N乘以M)的所有可能组合,其中: -元素为“1”和“0”。 -每列中应该只有一个“1”。 -对行没有限制。因此每行中允许有多个“1” 一种可能的状态,例如N=5,M=6 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 此外,我想生成每个可能的组合矩阵,然后计算如下内容(例如,我的问题中的效用函数): generate one possible matrix C . . for
1 0 1 0 0 0
0 1 0 0 0 1
0 0 0 0 0 0
0 0 0 1 1 0
0 0 0 0 0 0
此外,我想生成每个可能的组合矩阵,然后计算如下内容(例如,我的问题中的效用函数):
generate one possible matrix C
.
.
for i=1:N
for j=1:M
do something on C(:,:)
end
end
.
.
(以穷尽搜索的方式)将有批。通常当这里的问题涉及到:如何生成所有可能的X,真正的答案是:不要这样做,可能的X太多了。寻找解决问题的不同方法 但是,您可以在行数的基础上使用数字表示法: 使用:
dec2base
免责声明:由于
dec2base
的限制,这只适用于2dec2base
是一个不错的选择:)谢谢!:)同意你的观点,但这里的可能性取决于“行”和“列”的数量,当然假设一个有限状态,考虑到每个行的小值,最后给出了答案,而这里我们不关心复杂性和运行时间,因为考虑到逻辑和有限输入,我们将彻底搜索所有可能的状态,为了找到最佳回答状态(最优),我们可以将其与我们自己的方法的结果进行比较。在我的优化问题中,值在1和8之间变化。再次感谢@knedlsepp@knedlsepp代码中有一个问题,例如,对于行>9,对行=12和cols=5运行它,然后在ii==10时显示C,您将发现最后一列中没有“1”,其余行的结果相同(例如ii==11,依此类推)。所有列都应该包含一个'1'@fhm:感谢您发现错误。此版本现在适用于2@knedlsepp,希望你很好,老实说,你的回答对我来说是最好的帮助,我只想问你关于二进制矩阵中其他两种形式的穷举搜索,其中:1)每行只允许一个“1”,不限制cols,另一种情况:2)多个“1”允许在所有行和列中使用(每个列中应少于一个“1”),我的电子邮件:foad.hajiaghajani[at]gmail.com。谢谢你的帮助
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
%%// 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