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
. 如果我尝试存储超过构造函数中设置的非零元素的数量会发生什么?
请帮助澄清。