83 typedef QSharedPointer<IOUtils>
SPtr;
99 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const QString& sPath,
const QString& sDescription = QString());
101 static bool write_eigen_matrix(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& in,
const QString& sPath,
const QString& sDescription = QString());
103 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& in,
const QString& sPath,
const QString& sDescription = QString());
116 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
118 static bool write_eigen_matrix(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
120 static bool write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& in,
const std::string& sPath,
const std::string& sDescription = std::string());
132 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& out,
const QString& path);
134 static bool read_eigen_matrix(Eigen::Matrix<T, 1, Eigen::Dynamic>& out,
const QString& path);
136 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, 1>& out,
const QString& path);
148 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& out,
const std::string& path);
150 static bool read_eigen_matrix(Eigen::Matrix<T, 1, Eigen::Dynamic>& out,
const std::string& path);
152 static bool read_eigen_matrix(Eigen::Matrix<T, Eigen::Dynamic, 1>& out,
const std::string& path);
162 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, in.cols());
163 matrixName.row(0) = in;
172 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(in.rows(), 1);
173 matrixName.col(0) = in;
183 if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
184 QTextStream stream(&file);
185 if (!sDescription.isEmpty()) {
186 stream <<
"# Dimensions (rows x cols): " << in.rows() <<
" x " << in.cols() <<
"\n";
187 stream <<
"# Description: " << sDescription <<
"\n";
190 for (
int row = 0; row < in.rows(); row++) {
191 for (
int col = 0; col < in.cols(); col++)
192 stream << in(row, col) <<
" ";
196 qWarning() <<
"Could not write Eigen element to file! Path does not exist!";
210 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, in.cols());
211 matrixName.row(0) = in;
220 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(in.rows(), 1);
221 matrixName.col(0) = in;
228bool IOUtils::write_eigen_matrix(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& in,
const std::string& sPath,
const std::string& sDescription)
230 std::ofstream outputFile(sPath);
231 if (outputFile.is_open()) {
232 if (!sDescription.empty()) {
233 outputFile <<
"# Dimensions (rows x cols): " << in.rows() <<
" x " << in.cols() <<
"\n";
234 outputFile <<
"# Description: " << sDescription <<
"\n";
237 for (
int row = 0; row < in.rows(); row++) {
238 for (
int col = 0; col < in.cols(); col++)
239 outputFile << in(row, col) <<
" ";
243 qWarning() <<
"Could not write Eigen element to file! Path does not exist!";
287 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
289 QTextStream in(&file);
290 QList<Eigen::VectorXd> help;
292 while (!in.atEnd()) {
293 QString line = in.readLine();
294 if (!line.contains(
"#")) {
295 QStringList fields = line.split(QRegularExpression(
"\\s+"));
298 if (fields.at(fields.size() - 1) ==
"")
301 Eigen::VectorXd x(fields.size());
303 for (
int j = 0; j < fields.size(); j++) {
304 x(j) = fields.at(j).toDouble();
311 int rows =
static_cast<int>(help.size());
312 int cols = rows <= 0 ? 0 : static_cast<int>(help.at(0).rows());
314 out.resize(rows, cols);
316 for (
int i = 0; i < help.length(); i++) {
317 out.row(i) = help[i].transpose();
320 qWarning() <<
"IOUtils::read_eigen_matrix - Could not read Eigen element from file! Path does not exist!";
362 std::ifstream inputFile(path);
364 if (inputFile.is_open()) {
366 std::vector<Eigen::VectorXd> help;
370 while (std::getline(inputFile, line)) {
371 if (line.find(
'#') == std::string::npos) {
372 std::vector<double> elements;
373 std::stringstream stream{line};
377 while (stream >> element) {
378 elements.push_back(std::stod(element));
382 Eigen::VectorXd x(elements.size());
384 for (
size_t i = 0; i < elements.size(); ++i) {
385 x(i) = elements.at(i);
388 help.push_back(std::move(x));
392 int rows =
static_cast<int>(help.size());
393 int cols = rows <= 0 ? 0 : static_cast<int>(help.at(0).rows());
395 out.resize(rows, cols);
397 for (
size_t i = 0; i < help.size(); i++) {
398 out.row(
static_cast<Eigen::Index
>(i)) = help[i].transpose();
401 qWarning() <<
"IOUtils::read_eigen_matrix - Could not read Eigen element from file! Path does not exist!";