본문 바로가기
programming language/MATLAB

MATLAB 모든 경우의 수 뽑기 Cartesian Product

by __observer__ 2013. 8. 18.
반응형

아래 글에서는 Powershell 에서 Cartesian Product 를 구하는 방법에 대해 설명드렸었는데~ 


2013/08/18 - [powershell] - Powershell 경우의 수 조합 다 구하기(Cartesian Product)

 

이번 포스팅에서는 MATLAB에서 Cartesian Product 를 구하는 방법에 대해 설명 드리려 합니다.

 

사실 MATLAB 에서 Cartesian Product 를 구하는 방법은 매우 간단합니다.

 

바로 ndgrid() 함수를 이용하는 방법인데요~

 

다음과 같은 set 에 대해 조합의 경우의 수를 구해보죠~

 

A=[1 2];

B=[3 4];

C=[5 6];

 

경우의 수는 2 x 2 x 2 니까 8 개가 나오겠고 단순히 생각하면 for 문을 3개 중첩되게 만들면 해결 되겠지만~ 이보다는 ndgrid() 함수를 사용해서 아래와 같이 코딩하는게 더 좋은 방법이라고 생각됩니다.

 

A=[1 2];

B=[3 4];

C=[5 6];

 

sets = {A, B, C};

[x y z] = ndgrid(sets{:});

cartProd = [x(:) y(:) z(:)];


 

보시다 시피 굉장히 간단하게 구해지죠~ 위 코드를 실행 시켜보면 cartProd 변수에 결과가 저장되지만 아래 결과처럼 첫번째 열이 정렬이 안 되서 나옵니다.


 

경우에 따라 정렬이 필요하신 경우에는 sortrows() 함수를 사용해서 정렬 하시면 됩니다. sortrows() 함수의 두번째 인자는 정렬 기준이 되는 column index 를 의미 합니다.

 

2번째 column 을 기준으로 정렬하고 싶으신 분들은 아래 코드의 두번째 인자인 1 을 2로 바꾸시면 되겠죠~

 

sorted_cartProd =sortrows(cartProd, 1)

 

 

 

아래 주소에는 이에 대한 cartesianProduct() 라는 함수도 소개되고 있으니 필요하신 분들은 사용해 보시기 바랍니다.

 

http://stackoverflow.com/questions/4165859/matlab-generate-all-possible-combinations-of-the-elements-of-some-vectors


반응형

댓글