82 typedef QSharedPointer<IOUtils>
SPtr;
92 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const QString& sPath,
const QString& sDescription = QString());
94 static bool write_eigen_matrix(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& in,
const QString& sPath,
const QString& sDescription = QString());
96 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& in,
const QString& sPath,
const QString& sDescription = QString());
103 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
105 static bool write_eigen_matrix(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
107 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
114 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& out,
const QString& path);
116 static bool read_eigen_matrix(Eigen::Matrix<T, 1, Eigen::Dynamic>& out,
const QString& path);
118 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, 1>& out,
const QString& path);
125 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& out,
const std::string& path);
127 static bool read_eigen_matrix(Eigen::Matrix<T, 1, Eigen::Dynamic>& out,
const std::string& path);
129 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, 1>& out,
const std::string& path);
139 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1,in.cols());
140 matrixName.row(0)= in;
149 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(in.rows(),1);
150 matrixName.col(0)= in;
160 if(file.open(QIODevice::WriteOnly|QIODevice::Truncate))
162 QTextStream stream(&file);
163 if(!sDescription.isEmpty()) {
164 stream<<
"# Dimensions (rows x cols): "<<in.rows()<<
" x "<<in.cols()<<
"\n";
165 stream<<
"# Description: "<<sDescription<<
"\n";
168 for(
int row = 0; row<in.rows(); row++) {
169 for(
int col = 0; col<in.cols(); col++)
170 stream << in(row, col)<<
" ";
174 qWarning()<<
"Could not write Eigen element to file! Path does not exist!";
188 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1,in.cols());
189 matrixName.row(0)= in;
198 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(in.rows(),1);
199 matrixName.col(0)= in;
206bool IOUtils::write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription)
208 std::ofstream outputFile(sPath);
209 if(outputFile.is_open())
211 if(!sDescription.empty()) {
212 outputFile<<
"# Dimensions (rows x cols): "<<in.rows()<<
" x "<<in.cols()<<
"\n";
213 outputFile<<
"# Description: "<<sDescription<<
"\n";
216 for(
int row = 0; row<in.rows(); row++) {
217 for(
int col = 0; col<in.cols(); col++)
218 outputFile << in(row, col)<<
" ";
222 qWarning()<<
"Could not write Eigen element to file! Path does not exist!";
268 if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
270 QTextStream in(&file);
271 QList<Eigen::VectorXd> help;
275 QString line = in.readLine();
276 if(!line.contains(
"#")) {
277 QStringList fields = line.split(QRegularExpression(
"\\s+"));
280 if(fields.at(fields.size()-1) ==
"")
283 Eigen::VectorXd x (fields.size());
285 for (
int j = 0; j<fields.size(); j++) {
286 x(j) = fields.at(j).toDouble();
293 int rows = help.size();
294 int cols = rows <= 0 ? 0 : help.at(0).rows();
296 out.resize(rows, cols);
298 for (
int i=0; i < help.length(); i++) {
299 out.row(i) = help[i].transpose();
302 qWarning()<<
"IOUtils::read_eigen_matrix - Could not read Eigen element from file! Path does not exist!";
346 std::ifstream inputFile(path);
348 if(inputFile.is_open()) {
350 std::vector<Eigen::VectorXd> help;
354 while(std::getline(inputFile, line)){
355 if(line.find(
'#') == std::string::npos){
356 std::vector<double> elements;
357 std::stringstream stream{line};
361 while(stream >> element){
362 elements.push_back(std::stod(element));
366 Eigen::VectorXd x (elements.size());
368 for(
size_t i = 0; i < elements.size(); ++i){
369 x(i) = elements.at(i);
372 help.push_back(std::move(x));
376 int rows = help.size();
377 int cols = rows <= 0 ? 0 : help.at(0).rows();
379 out.resize(rows, cols);
381 for (
size_t i = 0; i < help.size(); i++) {
382 out.row(i) = help[i].transpose();
385 qWarning()<<
"IOUtils::read_eigen_matrix - Could not read Eigen element from file! Path does not exist!";