'문자행렬'에 해당되는 글 2

  1. 2009.08.05 Matlab - 지난번 문제 해결책, 문자 행렬끼리 곱하기
  2. 2009.08.03 오늘의 독학 - Matlab 1
A = {'a'; 'bb'; 'ccc'};
B = {'d', 'ee', 'fff', 'gggg'};

dA = A(:, ones(1,length(B)));
dB = B(ones(1,length(A)), :);

C = strcat(dA, dB);

C

--

C =
    'ad'      'aee'      'afff'      'agggg' 
    'bbd'     'bbee'     'bbfff'     'bbgggg'
    'cccd'    'cccee'    'cccfff'    'cccgggg'

--

MATLAB에서 문자열 처리를 할 때에는 cell을 쓰시는 게 편합니다.

일단 A 열벡터와 B 행벡터에 n개와 m개의 문자열이 있다고 합시다. (위에서는 n = 3, m = 4겠죠.)

dA는 A를 옆으로 m번 중복시켜서 만든 n*m cell이고,

dB는 B를 아래로 n번 중복시켜서 만든 n*m cell입니다.

(dA와 dB 마지막의 세미콜론을 지우고 실행해 보시면 금방 아실 겁니다.)

이렇게 크기가 같은 두 cell을 strcat()함수를 사용하면, 각각의 원소에 대해서 문자열을 붙일 수 있습니다.


출처 지식in 글쓴이 dlimpid
Present/일기상자 | Posted by walkingcat 2009. 8. 3. 19:34

오늘의 독학 - Matlab


오늘의 해야 할일은 행렬이었습니다.

4x4  * 3x3  이런 행렬이 아닌 349x1 * 1x349 행렬

349^2 를 계산하면 무려 121801개라는 엄청난 수의 데이터를 만들어야합니다.  (벌써 멀미나는데)

추가로 저것을 엑셀로 정리하고 중복되는것은 삭제하고..

방대한 양의 작업;

최대 장애물은 숫자라면 어떻게 엑셀로 해보겠으나,

문자 행렬 -_- (토한다)

예를들어
          2x1 행렬                      *              1x2행렬                                                    =     ...
   [ 1 홍길동 xxx yyy zzz                 [1 홍길동 xxx yyy zzz, 2 고길동 xxx yyy zzz]    =
     2 고길동 xxx yyy zzz]

아 정리할 엄두가 안나네요 ,  저게 무려 349 -_-) 안에 들어가는 내용은 더 많습니다.

행렬 계산은 Matlab 이라는 프로그램을 쓰면 쉽다길래

처음 마주하게 되었습니다.

300백만원 짜리란 소리를 들었지만 그런거야 뭐 별 감흥도 없었고 -_-

딱보니 무슨 java 같이 생긴게 설명서는 온통 영어에 알수없는 소스코드 같은것만 잔뜩 있더군요;

첫인상은 java 나 c 같은 프로그램인 줄 알았습니다.




한참 멍하니 있다가 설명서에 나온 그림(!)만 보고 따라해보니 조금 감이 옵니다.

어느정도 프로그래밍 언어와 비슷한 면도 있구요. (프로그래밍 언어에 대해서 얕은 지식만 있어도 충분히 도움이 되는듯..)

예를 들자면

A = [1, 2, 3, 4, 5]

라고 입력하면  A 라는 것은 [ 1 2 3 4 5 ] 라는 행렬로 정의 됩니다.

B = [1; 2; 3; 4; 5]

이렇게 입력하면 B는 [ 1                 라는 5x1 행렬로 정의 되구요 ;
                               2
                               3
                               4
                               5]

A행렬과 B행렬을 곱하고 싶다!

면,  A*B 라고 입력해주면 계산되어서 나옵니다.  ㅎㄷㄷ

더 엄청난 것은 A' 이라고 입력하면 이것은 B와 같게 계산한다는 것입니다.

즉 A' = B .. 정말 엄청난 프로그램이군요.  (아 이런거에 감동받다니)

이렇게 좋은게 있는데 왜 학교에선 생고생을 해가며 손으로 B4용지를 가득 메웠을까요 ㅠㅠ;;


-----------여기서부턴 신경안쓰셔도 됩니다. 잘나가다가 결국은 파토나는 내용------------

문자열은 A= '문자'  로 지정하면 된다 길래

349개를 정리해서 다 입력하고 계산해 봤으나

out of memory , 아웃오브안중 아닙니다. 계산량이 너무 많아서 안된다는 겁니다.

' 슈발.. 설마 할 수 없는건 아니겠지 하며 -_-.. 패닉상태'

엑셀로 일일히 해야할 듯한 난관에 봉착하고,

'어쩔수 없다 , 힘들지만 행렬을 쪼개서 하자' 라는 생각으로 다시 도전.

* 행렬을 쪼개서 계산한다?

?x1 행렬이기에 해볼만 합니다.

10x1 행렬이라면 일단 5x1, 5x1 로 나눈다음 A, B라 생각하면

각각계산해서 [ AA' AB'   형태로 합쳐주면 되겠지요.
                     BA'  BB'] 

각설 하고, 결과는 개판;

변수 자체는 문자형태로 정의가 가능한데(String A= "고길동"; 처럼)

이런 변수끼리 계산을 해버리면 결과값은 엉뚱하게 숫자로 나와버립니다. 

(String * String = Double 이라니..  내가 고자라니..)

뭐 처음 프로그램 만져본놈이 뭘알겠느냐 만은 더이상 진전이 안되더군요;

결과 형태를 문자형태로 표현이 안되는가 흐앍..

제가 하고 싶은건 두개의 변수가 붙어서 출력되는건데 말입니다.


(행렬로 만들기 귀찮아서; 그냥 대충 표현합니다)
A1 = "고길동"

A2 = "홍길동"

A1*A2 = 고길동 홍길동

이거 하는 방법이 없나요 ㅠㅠ

내일 출근하면 하루종일 엑셀 노가다 해야될거 같음 흙..