Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB:仅用一个'生成二进制矩阵的所有可能组合;1';每列_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays MATLAB:仅用一个'生成二进制矩阵的所有可能组合;1';每列

Arrays 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

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 i=1:N
      for j=1:M
        do something on C(:,:)
      end
    end
  .
.

(以穷尽搜索的方式)

将有。通常当这里的问题涉及到:如何生成所有可能的X,真正的答案是:不要这样做,可能的X太多了。寻找解决问题的不同方法

但是,您可以在行数的基础上使用数字表示法:

使用:
dec2base

免责声明:由于
dec2base
的限制,这只适用于
2
dec2base
是一个不错的选择:)谢谢!:)同意你的观点,但这里的可能性取决于“行”和“列”的数量,当然假设一个有限状态,考虑到每个行的小值,最后给出了答案,而这里我们不关心复杂性和运行时间,因为考虑到逻辑和有限输入,我们将彻底搜索所有可能的状态,为了找到最佳回答状态(最优),我们可以将其与我们自己的方法的结果进行比较。在我的优化问题中,值在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