void SymmetricSolver::circulantMul(const BlockCMat& M, mvec& v, unsigned int nPhi) { assert(!(v.size()%nPhi)); assert(M.nCols()*nPhi == v.size()); // stuff vector into vector-of-vectors for circulant blocks VarVec<mvec> vv; for(unsigned int i=0; i<v.size()/nPhi; i++) vv.push_back(mvec(&v[i*nPhi], &v[i*nPhi]+nPhi)); vv = M.lMultiply<mvec,mvec>(vv); // pull data back out v.getData().resize(M.nRows()*nPhi); for(unsigned int i=0; i<M.nRows(); i++) for(unsigned int j=0; j<nPhi; j++) v[i*nPhi+j] = vv[i][j]; }
mvec<T*> Genome::GetGenesInNucleotideRange(mvec<T*> src, int s, int f) { mvec<T*> genes; for(int gagI = 1; gagI <= src.size(); ++gagI) { if (min(src(gagI)->indices) >= s && max(src(gagI)->indices) <= f) genes.push_back(src(gagI)); } return genes; }
void process(AverageCounter< mvec >& ac) { if(elements) EXPECT_EQ( static_cast<double>(sum) / elements, ac.getAverage() ); else EXPECT_EQ( 0.0, ac.getAverage() ); EXPECT_EQ( elements, vec.size() ); EXPECT_EQ( elements, ac.getElements() ); std::for_each(begin(test_vector), end(test_vector), [&](int el) { ++elements; sum += el; ac.push_back( el ); EXPECT_EQ( static_cast<double>(sum) / elements, ac.getAverage() ); EXPECT_EQ( elements, vec.size() ); EXPECT_EQ( elements, ac.getElements() ); }); }