The boost ublas::compressed_matrix
should only allocate space for non-zero elements. But in the below example, I am getting strange results.
#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace std;
using namespace boost::numeric::ublas;
int main () {
{
compressed_matrix<double,row_major> m (4, 4, 2*2);
cout << sizeof(m) << "\n"; // prints 56
cout << m << std::endl;
}
{
matrix<double> m (4, 4);
cout << sizeof(m) << "\n"; // prints 20
cout << m << std::endl;
}
return 0;
}
Why is ublas::matix
taking only 20
bytes for 4x4 matrix
(instead of 8*4*4=128
bytes) whereas ublas::compressed_matrix
with 2*2=4
non-zero elements is taking 56
bytes (instead of 4*8=32
bytes)?
I was also confused how do I specify location of the non-zero elements in ublas::compressed_matrix
. What happens if I try to store more than the number of non-zero elements set in constructor?
Please help clarify.