81 typedef QSharedPointer<IOUtils>
SPtr;
91 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const QString& sPath,
const QString& sDescription = QString());
93 static bool write_eigen_matrix(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& in,
const QString& sPath,
const QString& sDescription = QString());
95 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& in,
const QString& sPath,
const QString& sDescription = QString());
102 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
104 static bool write_eigen_matrix(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
106 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
113 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& out,
const QString& path);
115 static bool read_eigen_matrix(Eigen::Matrix<T, 1, Eigen::Dynamic>& out,
const QString& path);
117 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, 1>& out,
const QString& path);
124 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& out,
const std::string& path);
126 static bool read_eigen_matrix(Eigen::Matrix<T, 1, Eigen::Dynamic>& out,
const std::string& path);
128 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, 1>& out,
const std::string& path);
138 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1,in.cols());
139 matrixName.row(0)= in;
148 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(in.rows(),1);
149 matrixName.col(0)= in;
159 if(file.open(QIODevice::WriteOnly|QIODevice::Truncate))
161 QTextStream stream(&file);
162 if(!sDescription.isEmpty()) {
163 stream<<
"# Dimensions (rows x cols): "<<in.rows()<<
" x "<<in.cols()<<
"\n";
164 stream<<
"# Description: "<<sDescription<<
"\n";
167 for(
int row = 0; row<in.rows(); row++) {
168 for(
int col = 0; col<in.cols(); col++)
169 stream << in(row, col)<<
" ";
173 qWarning()<<
"Could not write Eigen element to file! Path does not exist!";
187 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1,in.cols());
188 matrixName.row(0)= in;
197 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(in.rows(),1);
198 matrixName.col(0)= in;
205bool IOUtils::write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription)
207 std::ofstream outputFile(sPath);
208 if(outputFile.is_open())
210 if(!sDescription.empty()) {
211 outputFile<<
"# Dimensions (rows x cols): "<<in.rows()<<
" x "<<in.cols()<<
"\n";
212 outputFile<<
"# Description: "<<sDescription<<
"\n";
215 for(
int row = 0; row<in.rows(); row++) {
216 for(
int col = 0; col<in.cols(); col++)
217 outputFile << in(row, col)<<
" ";
221 qWarning()<<
"Could not write Eigen element to file! Path does not exist!";
267 if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
269 QTextStream in(&file);
270 QList<Eigen::VectorXd> help;
274 QString line = in.readLine();
275 if(!line.contains(
"#")) {
276 QStringList fields = line.split(QRegularExpression(
"\\s+"));
279 if(fields.at(fields.size()-1) ==
"")
282 Eigen::VectorXd x (fields.size());
284 for (
int j = 0; j<fields.size(); j++) {
285 x(j) = fields.at(j).toDouble();
292 int rows = help.size();
293 int cols = rows <= 0 ? 0 : help.at(0).rows();
295 out.resize(rows, cols);
297 for (
int i=0; i < help.length(); i++) {
298 out.row(i) = help[i].transpose();
301 qWarning()<<
"IOUtils::read_eigen_matrix - Could not read Eigen element from file! Path does not exist!";
345 std::ifstream inputFile(path);
347 if(inputFile.is_open()) {
349 std::vector<Eigen::VectorXd> help;
353 while(std::getline(inputFile, line)){
354 if(line.find(
'#') == std::string::npos){
355 std::vector<double> elements;
356 std::stringstream stream{line};
360 while(stream >> element){
361 elements.push_back(std::stod(element));
365 Eigen::VectorXd x (elements.size());
367 for(
size_t i = 0; i < elements.size(); ++i){
368 x(i) = elements.at(i);
371 help.push_back(std::move(x));
375 int rows = help.size();
376 int cols = rows <= 0 ? 0 : help.at(0).rows();
378 out.resize(rows, cols);
380 for (
size_t i = 0; i < help.size(); i++) {
381 out.row(i) = help[i].transpose();
384 qWarning()<<
"IOUtils::read_eigen_matrix - Could not read Eigen element from file! Path does not exist!";