2014-04-16 3 views
0

나는 그 안에 0과 1의 모든 조합을 가진 2^n 행렬을 갖고 싶습니다. 예를 들어, n = 6 (n = # rows x #columns) array{1}=[0 0 0; 0 0 0], 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은 size (length (V).^N) -by-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 

을이 M2=combn(M,2) 같은 큰 매트릭스를 생성하기 위해 M을 사용하지만, 이것은 잘못된 결과를 생성한다. 나는이 같은 M 행을 연결할 경우, :

M=combn([000;010;100;001;110;011;101;111],2)' 내가 예를 들어 컬럼에 대해, 즉 내가 각 열을 얻고 64 matrices.So에 별도로 변환 할 수 있습니다

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 

을 기대 가까이 뭔가를 얻을 수 1은 [0;0]에서 [0 0 0;0 0 0] 등으로 변환 될 것입니다. 그러나 나는 그것이 더 짧은 시간에 우아하게 해결 될 수있는 훨씬 쉬운 문제라고 생각합니다. dec2bin 사용

답변

4

:

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

MM(:,:,2) 등 제이다 M(:,:,1)은 제 1 행렬이되도록 크기 r X c X 2^(r*c)의 3 차원 배열 원리

:

dec2bin 이진 문자열 숫자의 발표. 따라서 dec2bin(0:2^(r*c)-1)0에서 2^(r*c)-1까지의 모든 숫자를 이진수로 표시하며 한 줄에 각각 표시합니다. -'0' 부분은 문자열을 01 값의 숫자 벡터로 바꿉니다. 그런 다음 reshape은 각 행을 원하는 행렬을 구성하기 위해 r x c 형식으로 변환합니다.

+0

어떻게 제어하나요? 나는 n이 6이지만 2 행 3 열일 수 있음을 의미합니다. 위의 예와 관련시킬 수 있습니까? – JustCurious

+0

@JustCurious 죄송합니다. 질문을주의 깊게 읽지 않았습니다. 나는 지금 당신이 원하는 것을 이해하지 못합니다. –

+0

2^n 2 진 행렬을 원합니다. 각 행렬은 다른 행렬과 같아야하지만 동일한 #rows x #columns를 가져야합니다. 중요한 것은 n = # rows x #columns입니다. 그래서 n = 6 인 경우, 각각 64 개의 행렬을 갖고 싶습니다. 각각의 행렬에는 0과 1의 다른 조합이 있습니다. 지금은 조금 더 명확 해 졌나요? – JustCurious

관련 문제