이, 몇 시간째 디버깅인가. 아무리 해도 순서가 맞지 않아서 뒤지고 뒤져서 결국은 행과 열을 잘못 썼기 때문이라는 것을 알아 내었다. >.<""
다차원 공간 상에 있는 데이터들을 비슷한 것끼리 모으는 클러스터링을, 이미 기존에 구현되어 있는 것을 가져다 쓰기로 결정. 그래서 매우 유명한 Cluster 3.0 을 받아서, 소스 코드 사용법 보고 내 코드에 집어 넣는 것 시도. 별 무리 없이 되는 것 같은데, 아무리 봐도 열의 순서 (order of column) 가 다르다. 옆에 clustering 된 dendrogram 놓고 계속 비교하고 있는데, 순서가 뒤죽박죽. 내 머리도 뒤죽박죽.
원래의 소스 코드는 library + front-end program(직접 최종 사용자가 사용하는 프로그램), 으로 구성이 되어 있어서, 직접 사용자가 사용하는 프로그램의 소스 코드가 library 를 사용하고 있다. 즉, library 사용법을 보기 위해서는 front-end 프로그램 소스를 보면 되는 것이지. 그래서 보았더니, 헐, 열의 순서를 알아 내는 것이 꽤나 복잡한 루틴으로 되어 있다. 뭐, 사실 수업 시간에 살짝 배우고 코딩한 적은 있는데, 다시 이해하고 (난 조금 지나면 다 잊는, 붕어의 기억력을 갖고 있다 ㅋㅋ) 코드랑 대응시키기 귀찮아서 그냥 복사해다 넣었다. 그렇게 한 후 테스트 하는데 계속 안 맞는다. 그래서, 결국 front-end program까지 컴파일. 이제, 같은 입력 파일로 주고 library, front-end program, 내 소스 코드를 막 고쳐가면서, printf, std::cout 써가면서 값을 확인, 따지고 따지고 들어가서 알아낸 것은... 으... column 을 clustering 하면 weight 는 row의 개수만큼 있어야 했는데 column 수만큼을 주었다. 결국 distance 계산할 때 weight 가 달라서 각 요소 간의 거리가 다르게 나왔던 것. 이것이 문제. 아놔, 그래서 아주 간단히, 정말 좀 억울할 정도로 변수 하나 바꾸어 주니 모든 것은 예상대로... >.<""
오른쪽 그림이 순서대로 나와야 하는데 말이지... 오랜만에 vi 창을 이리 자르고 저리 자르고. ㅋㅋ
남들이 구현해 놓은 것 사용하기 시작하면서 소스 코드를 볼 일이 잦아 졌다. 워낙에 온갖 실수로 디버깅을 하던지라, >.<"", ㅋㅋ, 소스 코드 따라가는 것이 이제는 버겁지만은 않다, 뼈아픈 경험의 산물이라고 위안하자. 그래도, 해결했으니, 오예.
한 대여섯 시간 넘어가면서부터는, 그냥 system call 해서 쓰면 되는데, 하는 생각이 들긴 했다. 뭐, load가 걸리긴 하지만 컴퓨터는 이미 매우 빠르기 때문에 몇 만 개를 실행시켜도 금방 되겠지. 그런데, 왠지 모르게 그렇게 하면 지는 것 같은 괜한 고집, ㅋ.
'연구관련 > 연구생활' 카테고리의 다른 글
실패는 병가지상사이라지만 (0) | 2011.03.24 |
---|---|
컴퓨터가 탈 수도 있다는 건 (2) | 2011.03.08 |
에러가 안나서 불안해 (0) | 2011.01.19 |
생명연장의 꿈, CR (0) | 2011.01.05 |
아... 속도... (0) | 2010.11.24 |