부랴부랴 계산 시간을 점검해 봤더니 하나당 0.003초 정도.
전체 계산 횟수 45001*45000/2 곱하기 0.003 초. 이걸 다시 3600초로 나눠 몇시간이나 드는가를 계산해 보면 843.7687 시간, 35일은 더 돌려야 하는 엄청난 계산 시간!
CPAN 모듈을 쓴 경우 probeset pair에 대한 correlation 계산이 각각에 대한 standard deviation을 매번 계산하기 때문에, 중복된 계산이 어마어마하다. 그래서 먼저 각 probeset 의 expression data를 z-score로 transform 했다. z-score transform 된 경우 두 probeset의 z-score transformed expression vector를 곱해서 더해주기면 하면 correlation coefficient가 되기 때문에 계산량이 대폭 줄어든다. (포스팅 참조)
## Correlation function 이용한 경우
correlation(\@pair1,\@pair2 );
sub correlation{
my $i=shift;
my $j=shift;
my $sd1=standardize($i);
my $sd2=standardize($j);
my $cor;
$cor+=$sd1->[$_]*$sd2->[$_] for 0..$#$sd1;
$cor/=$#$sd1;
return $cor;
}
## 먼저 z-score transform 한 경우
$cor+=$pair1[$_]*$pair2[$_] for 0..$#pair1;
$cor/=$#pair1;
이렇게 한 결과 하나당 계산 시간이 0.0001초로, 약 30배로 계산 속도가 빨라졌다.
이렇게 해도 전체 셋에 대한 계산은 44시간이 걸리긴 한다만...
No comments:
Post a Comment