2014-04-16 79 views
0

我想要2^n矩陣,其中0和1的所有組合。例如,對於n = 6(n =#行x#列)​​,array{2}=[0 0 0; 0 0 1] ... array{64}=[1 1 1;1 1 1]。我使用MATLAB,並且我遇到了combn.m(M = COMBN(V,N))返回向量V中元素的N個元素的所有組合.M具有大小(長度(V).N)。 ),dec2bin()但我不能說得很對。我的另一個想法是創建一個大矩陣,然後將其分割成2^n個矩陣。例如,對於n = 6(2×3),我這樣做M=combn([0 1],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 matrices.So,例如列1將從[0;0]轉換爲[0 0 0;0 0 0]等。但是,我相信這是一個更容易的問題,它可以在較短的時間內優雅地解決。

回答

4

使用dec2bin

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,[]); 

M是大小r X c X 2^(r*c)的3D陣列,使得M(:,:,1)是第一矩陣,M(:,:,2)是第二等

工作原理

dec2bin給出了一個二進制字符串re介紹一個號碼。所以dec2bin(0:2^(r*c)-1)給出了從02^(r*c)-1的所有數字,用二進制表示,每一行都在一行中。 -'0'部分只是將字符串轉換爲01值的數字向量。然後reshape將這些行中的每一行放入一個r x c表單中,以組成每個所需的矩陣。

+0

你怎麼控制n?我的意思是n可以是6但是2行3列。你能把它與上面的例子聯繫起來嗎? – JustCurious

+0

@JustCurious對不起,我沒有仔細閱讀你的問題。我現在有,我不明白你想要什麼 –

+0

我想要2^n個二進制矩陣。每個矩陣應該與另一個不同,但具有相同的#rows x #columns。重要的是,n =#行x#列。所以對於n = 6,我想要有64個矩陣,每個矩陣都有不同的零和一個組合。現在有點清楚了嗎? – JustCurious