MATLAB:生成二进制矩阵的所有可能组合,每列中只有一个“1”
MATLAB: Generate all possible combination of a binary matrix with only one '1' in each column
MATLAB:我想了解如何生成矩阵(N 乘 M)的所有可能组合,其中:
- 元素是“1”和“0”。
- 每列中应该只有一个“1”。
- 没有限制 rows.so 每行允许多个“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
.
.
(穷举法)
会有手。通常这里的问题涉及到:How do I generate all possible X,真正的答案是:Don't do it , 可能的 X 太多了。寻找解决问题的不同方法。
不过,您可以在行数的基础上使用数字表示法:
方法使用:dec2base
免责声明:由于 dec2base
的限制,这仅适用于 2<=rows<=36
(希望足够了。否则我们将复制编辑文件 dec2base.m
并删除它的最后两个行和错误检查行 24
以实现 2<=rows
的任意值。出于版权原因,我不会 post 这段代码。)。
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
MATLAB:我想了解如何生成矩阵(N 乘 M)的所有可能组合,其中: - 元素是“1”和“0”。 - 每列中应该只有一个“1”。 - 没有限制 rows.so 每行允许多个“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
.
.
(穷举法)
会有手。通常这里的问题涉及到:How do I generate all possible X,真正的答案是:Don't do it , 可能的 X 太多了。寻找解决问题的不同方法。
不过,您可以在行数的基础上使用数字表示法:
方法使用:dec2base
免责声明:由于 dec2base
的限制,这仅适用于 2<=rows<=36
(希望足够了。否则我们将复制编辑文件 dec2base.m
并删除它的最后两个行和错误检查行 24
以实现 2<=rows
的任意值。出于版权原因,我不会 post 这段代码。)。
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