How to efficiently copy sparse matrix row to vector?
"Reich, Darrell" <[email protected]>
| Newsgroups | gmane.comp.lib.boost.ublas |
|---|---|
| Message-ID | <56A4B6DB41508E44B3E3BE1603D25BCF02C76365@0461-its-exmb01.us.saic.com> |
What is the best way to copy a row from an N x N sparse matrix into a vector of size N? I see a possible solution using std::copy or the overloaded equals sign for the opposite question here: http://stackoverflow.com/questions/9420486/how-to-copy-a-boostnumericubl asvector-to-a-matrix std::copy(v.begin(), v.end(), m.begin2()); ublas::matrix_row<ublas::matrix<double> > r( m, 0 ); row(m, 0) = v; I understand from the documentation about the iterators used in the copy command above. The overloaded '>' is a surprise. I'm resisting using for loops. Please clarify the syntax of the most efficient way to do this for the sparse matrix example code below. #include <boost/numeric/ublas/vector_sparse.hpp> #include <boost/numeric/ublas/matrix_sparse.hpp> const int n = 1e6; boost::numeric::ublas::compressed_matrix<float> M(n,n); // sparse boost::numeric::ublas::compressed_vector<float> v(n); // sparse M(0,0) = 1; M(1,1) = 2; // TODO: copy row of matrix to vector... newM = M * v; Thank you for your help! So far boost has been a pleasure to use as I brush up on my linear algebra and C++ syntax--Fortran and java have turned my mind into mush. All of my frustrations so far have been successfully blamed on Microsoft Visual C++ for Windows. Google has successfully matched me to equally frustrated individuals, a few of which actually posted the correct solution so I've got my sample code to compile! Could they hide the include path better so it takes a few more mouse clicks? I'm warming up to the idea of the header library idea more and more very cleaver.