830 - MarkovModel::Transpose(): Difference between revisions
From Genome Analysis Wiki
Jump to navigationJump to search
Created page with "<source lang="cpp"> void MarkovModel::Transpose(float * from, float * to, double r) { if (r == 0) for (int i = 0; i < states; i++) to[i] = from[i]; els..." |
No edit summary |
||
| Line 7: | Line 7: | ||
else | else | ||
{ | { | ||
double sum = 0.0; | double sum = 0.0; | ||
| Line 13: | Line 12: | ||
sum += from[i]; | sum += from[i]; | ||
sum *= r | sum *= r / states; | ||
double complement = 1. - r; | double complement = 1. - r; | ||
| Line 21: | Line 20: | ||
{ | { | ||
sum *= 1e15; | sum *= 1e15; | ||
complement *= 1e15; | complement *= 1e15; | ||
} | } | ||
for (int i = 0; i < states; i++) | for (int i = 0; i < states; i++) | ||
to[i] = from[i] * complement | to[i] = from[i] * complement + sum; | ||
} | } | ||
} | } | ||
</source> | </source> | ||
Latest revision as of 14:39, 25 September 2013
void MarkovModel::Transpose(float * from, float * to, double r)
{
if (r == 0)
for (int i = 0; i < states; i++)
to[i] = from[i];
else
{
double sum = 0.0;
for (int i = 0; i < states; i++)
sum += from[i];
sum *= r / states;
double complement = 1. - r;
// avoid underflows
if (sum < 1e-10)
{
sum *= 1e15;
complement *= 1e15;
}
for (int i = 0; i < states; i++)
to[i] = from[i] * complement + sum;
}
}