boostublas::compressed_matrix应该只为非零元素分配空间。但在下面的例子中,我得到了奇怪的结果。
#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;
}
为什么只ublas::matix取20字节4x4 matrix(而不是8*4*4=128字节)ublas::compressed_matrix,2*2=4而非零元素取56字节(而不是4*8=32字节)?
我也很困惑如何在ublas::compressed_matrix. 如果我尝试存储超过构造函数中设置的非零元素的数量会发生什么?
请帮助澄清。