我就是这样:
How to write/read an Eigen matrix from binary file
namespace Eigen{
template<class Matrix>
void write_binary(const char* filename, const Matrix& matrix){
std::ofstream out(filename,ios::out | ios::binary | ios::trunc);
typename Matrix::Index rows=matrix.rows(), cols=matrix.cols();
out.write((char*) (&rows), sizeof(typename Matrix::Index));
out.write((char*) (&cols), sizeof(typename Matrix::Index));
out.write((char*) matrix.data(), rows*cols*sizeof(typename Matrix::Scalar) );
out.close();
}
template<class Matrix>
void read_binary(const char* filename, Matrix& matrix){
std::ifstream in(filename,ios::in | std::ios::binary);
typename Matrix::Index rows=0, cols=0;
in.read((char*) (&rows),sizeof(typename Matrix::Index));
in.read((char*) (&cols),sizeof(typename Matrix::Index));
matrix.resize(rows, cols);
in.read( (char *) matrix.data() , rows*cols*sizeof(typename Matrix::Scalar) );
in.close();
}
} // Eigen::
但问题是稀疏模块: 当我想写SparseVector时,我得到:
void Eigen :: write_binary(const char *,const Matrix&amp;)[with Matrix = 本征::斯帕塞夫克托]”: ../re_fol/createComparisonData.cpp:54:33:从这里实例化 ../re_fol/createComparisonData.cpp:33:5:错误:类型无效的强制转换 'const Storage {aka const Eigen :: internal :: CompressedStorage}'输入'char *'make:*** [re_fol / createComparisonData.o]错误 1
这一行:
out.write((char*) matrix.data(), rows*cols*sizeof(typename Matrix::Scalar) );
我知道向量是特征中特殊类型的矩阵,但是稀疏模块有一些可能是另一种类型的索引数据......?:
const Eigen::internal::CompressedStorage<double, > int>}’ to type ‘char*’ make: