Я просто следую за этим:
Как написать / прочитать собственную матрицу из двоичного файла
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::
Но проблема в модуле Sparse:
Когда я хочу написать SparseVector, я получаю:
void Eigen :: write_binary (const char *, const Matrix&) [с матрицей =
Эйген :: Спарсевектор]:
../re_fol/createComparisonData.cpp:54:33: создается отсюда
../re_fol/createComparisonData.cpp:33:5: ошибка: неверное приведение типа
St 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) );
Я знаю, что вектор — это специальный тип матрицы в eigen, но у разреженного модуля могут быть другие типы данных sotrage ……?:
const Eigen::internal::CompressedStorage<double, > int>}’ to type ‘char*’ make:
Задача ещё не решена.
Других решений пока нет …