diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-03-06 11:58:22 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-03-06 11:58:22 +0100 |
commit | 98ce4455ddad01ef028b65f96e232d4b750647f0 (patch) | |
tree | 248f3d88d1e65f8fe2cdbb18215f05982764560b /test/sparse.h | |
parent | 69bd334d2be5890cd7a8b5f4d7e62f5db1b02b18 (diff) |
fix sparse vector assignment from a sparse matrix
Diffstat (limited to 'test/sparse.h')
-rw-r--r-- | test/sparse.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/sparse.h b/test/sparse.h index 4db0004aa..b6f6e6fce 100644 --- a/test/sparse.h +++ b/test/sparse.h @@ -178,5 +178,30 @@ initSparse(double density, } } +template<typename Scalar> void +initSparse(double density, + Matrix<Scalar,1,Dynamic>& refVec, + SparseVector<Scalar,RowMajor>& sparseVec, + std::vector<int>* zeroCoords = 0, + std::vector<int>* nonzeroCoords = 0) +{ + sparseVec.reserve(int(refVec.size()*density)); + sparseVec.setZero(); + for(int i=0; i<refVec.size(); i++) + { + Scalar v = (internal::random<double>(0,1) < density) ? internal::random<Scalar>() : Scalar(0); + if (v!=Scalar(0)) + { + sparseVec.insertBack(i) = v; + if (nonzeroCoords) + nonzeroCoords->push_back(i); + } + else if (zeroCoords) + zeroCoords->push_back(i); + refVec[i] = v; + } +} + + #include <unsupported/Eigen/SparseExtra> #endif // EIGEN_TESTSPARSE_H |