将 Eigen VectorXd 写入 CSV 格式
Write Eigen VectorXd in CSV format
我正在尝试将 Eigen::VectorXd
写入 CSV 文件。该向量来自 Eigen::MatrixXd
的一行。我的函数定义如下:
void writeMatrixToCSVwithID(fs::path path, VectorXd row, unsigned long int row_id){
const static IOFormat CSVFormat(StreamPrecision, DontAlignCols, ", ", "\n");
ofstream file(path.c_str(), std::ofstream::out | std::ofstream::app);
row.resize(1, row.size());
file << row_id << ", " << row.format(CSVFormat) << std::endl;
file.close();
}
问题是这会生成一个文件:
11, 0.247795
0.327012
0.502336
0.569316
0.705254
12, 0.247795
0.327012
0.502336
0.569316
0.705254
预期输出为:
11, 0.247795, 0.327012, 0.502336, 0.569316, 0.705254
12, 0.247795, 0.327012, 0.502336, 0.569316, 0.705254
我需要更改什么?
错误原因是Eigen将VectorXd输出为一列。 MatrixXd::row(id)
returns Block
似乎将行或列提取输出为列!
因此,我现在不再传递 VectorXd
行,而是将该行作为 MatrixXd
传递。 IOFormat
对象初始化为行分隔符“,”。
void writeMatrixToCSVwithID(fs::path path, MatrixXd row, unsigned long int row_id){
const static IOFormat CSVFormat(StreamPrecision, DontAlignCols, ", ", ", ");
ofstream file(path.c_str(), std::ofstream::app);
row.resize(1, row.size()); // Making sure that we are dealing with a row.
file << row_id << ", " << row.format(CSVFormat) << std::endl;
file.close();
}
这会产生所需的按行输出。
我正在尝试将 Eigen::VectorXd
写入 CSV 文件。该向量来自 Eigen::MatrixXd
的一行。我的函数定义如下:
void writeMatrixToCSVwithID(fs::path path, VectorXd row, unsigned long int row_id){
const static IOFormat CSVFormat(StreamPrecision, DontAlignCols, ", ", "\n");
ofstream file(path.c_str(), std::ofstream::out | std::ofstream::app);
row.resize(1, row.size());
file << row_id << ", " << row.format(CSVFormat) << std::endl;
file.close();
}
问题是这会生成一个文件:
11, 0.247795
0.327012
0.502336
0.569316
0.705254
12, 0.247795
0.327012
0.502336
0.569316
0.705254
预期输出为:
11, 0.247795, 0.327012, 0.502336, 0.569316, 0.705254
12, 0.247795, 0.327012, 0.502336, 0.569316, 0.705254
我需要更改什么?
错误原因是Eigen将VectorXd输出为一列。 MatrixXd::row(id)
returns Block
似乎将行或列提取输出为列!
因此,我现在不再传递 VectorXd
行,而是将该行作为 MatrixXd
传递。 IOFormat
对象初始化为行分隔符“,”。
void writeMatrixToCSVwithID(fs::path path, MatrixXd row, unsigned long int row_id){
const static IOFormat CSVFormat(StreamPrecision, DontAlignCols, ", ", ", ");
ofstream file(path.c_str(), std::ofstream::app);
row.resize(1, row.size()); // Making sure that we are dealing with a row.
file << row_id << ", " << row.format(CSVFormat) << std::endl;
file.close();
}
这会产生所需的按行输出。