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];
}
Example #2
0
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() );
		});
	}