Arrays 如何用所有组合填充二进制矩阵?

Arrays 如何用所有组合填充二进制矩阵?,arrays,matlab,matrix,binary,Arrays,Matlab,Matrix,Binary,我想要2^n个矩阵,其中包含0和1的所有组合。例如,对于n=6(n=#行x列)array{1}=[0 0;0 0 0],array{2}=[0 0 0;0 0 0 1]数组{64}=[11;11]。我在使用MATLAB时遇到了combn.m(m=combn(V,N)返回向量V中N个元素的所有组合。m的大小(长度(V)。^N)-by-N.),dec2bin(),但我不能完全正确。我的另一个想法是创建一个大矩阵,然后将其拆分为2^n个矩阵。例如,对于n=6(2 x 3),我做了这个M=combn([

我想要2^n个矩阵,其中包含0和1的所有组合。例如,对于n=6(n=#行x列)
array{1}=[0 0;0 0 0]
array{2}=[0 0 0;0 0 0 1]
<代码>数组{64}=[11;11]。我在使用MATLAB时遇到了
combn.m
(m=combn(V,N)返回向量V中N个元素的所有组合。m的大小(长度(V)。^N)-by-N.),
dec2bin()
,但我不能完全正确。我的另一个想法是创建一个大矩阵,然后将其拆分为2^n个矩阵。例如,对于n=6(2 x 3),我做了这个
M=combn([01],3)
,这给了我:

M =

 0     0     0
 0     0     1
 0     1     0
 0     1     1
 1     0     0
 1     0     1
 1     1     0
 1     1     1 
然后,使用此
M
创建一个更大的矩阵,如
M2=combn(M,2)
,但这会产生错误的结果。但是,如果我像这样连接M行:

M=combn([000;010;100;001;110;011;101;111],2)

M =

Columns 1 through 21

 0     0     0     0     0     0     0     0    10    10    10    10    10    10    10    10   100   100   100   100   100
 0    10   100     1   110    11   101   111     0    10   100     1   110    11   101   111     0    10   100     1   110

 Columns 22 through 42

   100   100   100     1     1     1     1     1     1     1     1   110   110   110   110   110   110   110   110    11    11
11   101   111     0    10   100     1   110    11   101   111     0    10   100     1   110    11   101   111     0    10

  Columns 43 through 63

  11    11    11    11    11    11   101   101   101   101   101   101   101   101   111   111   111   111   111   111   111
  100     1   110    11   101   111     0    10   100     1   110    11   101   111     0    10   100     1   110    11   101

  Column 64

   111
   111 
在这里,我可以得到每一列并将其分别转换为64个矩阵。例如,列1将从
[0;0]
转换为
[0 0;0 0 0]
等。然而,我相信这是一个更容易的问题,它可以在更短的时间内优雅地解决

使用:

M
是一个大小为
r
x
c
x
2^(r*c)
的3D数组,因此
M(:,:,1)
是第一个矩阵,
M(:,:,2)
是第二个矩阵等

工作原理:

dec2bin
给出数字的二进制字符串表示形式。因此
dec2bin(0:2^(r*c)-1)
给出了从
0
2^(r*c)-1的所有数字,每一行用二进制表示。
-'0'
部分只是将字符串转换为
0
1
值的数字向量。然后,
重塑
将这些行中的每一行放入
r
x
c
表格中,以组成所需的每个矩阵。

使用:

M
是一个大小为
r
x
c
x
2^(r*c)
的3D数组,因此
M(:,:,1)
是第一个矩阵,
M(:,:,2)
是第二个矩阵等

工作原理:


dec2bin
给出数字的二进制字符串表示形式。因此
dec2bin(0:2^(r*c)-1)
给出了从
0
2^(r*c)-1的所有数字,每一行用二进制表示。
-'0'
部分只是将字符串转换为
0
1
值的数字向量。然后,
reformate
将这些行中的每一行放入一个
r
x
c
表格中,以组成每个所需的矩阵。

如何控制n?我的意思是n可以是6,但是2行3列。你能把它和上面的例子联系起来吗?@很抱歉,我没有仔细阅读你的问题。我现在知道了,我不明白你想要什么2^n个二元矩阵。每个矩阵应不同于其他矩阵,但具有相同的#行x#列。重要的是,n=#行x#列。对于n=6,我想有64个矩阵,每个矩阵有不同的0和1的组合。现在清楚一点了吗?谢谢你的回答!非常优雅!正是我想要的!你能解释一下dec2bin和Reforme在这个场合是如何工作的吗?@非常感谢!我在回答中加了一个解释你是如何控制n的?我的意思是n可以是6,但是2行3列。你能把它和上面的例子联系起来吗?@很抱歉,我没有仔细阅读你的问题。我现在知道了,我不明白你想要什么2^n个二元矩阵。每个矩阵应不同于其他矩阵,但具有相同的#行x#列。重要的是,n=#行x#列。对于n=6,我想有64个矩阵,每个矩阵有不同的0和1的组合。现在清楚一点了吗?谢谢你的回答!非常优雅!正是我想要的!你能解释一下dec2bin和Reforme在这个场合是如何工作的吗?@非常感谢!我在回答中加了一个解释
r = 2; %// nunber of rows
c = 3; %// number of columns

M = dec2bin(0:2^(r*c)-1)-'0'; %// Or: M = de2bi(0:2^(r*c)-1);
M = reshape(M.',r,c,[]);