Eigen库学习笔记(十一)读写矩阵文件
由于调试时看不到矩阵的尺寸和数值,所以可以通过保存文件的形式查看矩阵。
1、写txt文件
代码:
void test_save_txt(Eigen::MatrixXf mat, string filename)
{
ofstream outfile(filename, ios::trunc);
outfile << mat;
outfile.close();
}
测试用例
Eigen::MatrixXf mat(24, 3);
mat <<
50, 25, 25,
100, 50, 50,
150, 75, 75,
75, 50, 50,
150, 100, 100,
225, 150, 150,
100, 75, 50,
200, 150, 100,
300, 225, 150,
100, 75, 75,
200, 150, 150,
300, 225, 225,
425, 50, 75,
850, 100, 150,
1275, 150, 225,
475, 75, 125,
950, 150, 250,
1425, 225, 375,
400, 75, 75,
800, 150, 150,
1200, 225, 225,
425, 75, 100,
850, 150, 200,
1275, 225, 300;
test_save_txt(mat, "data.txt");
输出到文件中的内容:
50 25 25
100 50 50
150 75 75
75 50 50
150 100 100
225 150 150
100 75 50
200 150 100
300 225 150
100 75 75
200 150 150
300 225 225
425 50 75
850 100 150
1275 150 225
475 75 125
950 150 250
1425 225 375
400 75 75
800 150 150
1200 225 225
425 75 100
850 150 200
1275 225 300
2、读写的一些选项
ofstream流,
- 以ios::app打开(或者“ios::app|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么在文件尾追加。
- 以ios::app|ios::in打开,不管有没有文件,都是失败。
- 以ios::ate打开(或者”ios::ate|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么清空该文件
- 以ios::ate|ios::in打开,如果没有文件,那么打开失败;如果有文件,那么定位到文件尾,并可以写文件,但是不能读文件
ifstream流,
- 以ios::app打开(“ios::app|ios::out”),不管有没有文件,打开都是失败。
- 以ios::ate打开(“ios::ate|ios::out”),如果没有文件,打开失败
- 如果有文件,打开成功,并定位到文件尾,但是不能写文件
fstream流,默认是ios::in,所以如果没有文件,ios::app和ios::ate都是失败,
- 以ios::app|ios::out,如果没有文件则创建文件,如果有文件,则在文件尾追加
- 以ios::ate|ios::out打开,如果没有文件则创建文件,如果有,则清空文件。
- 以ios::ate|ios::out|ios::in打开,如果没有文件,则打开失败,有文件则定位到文件尾
可见:ios::app不能用来打开输入流,即不能和ios::in相配合
而ios::ate可以和ios::in配合,此时定位到文件尾;如果没有ios::in相配合而只是同ios::out配合,那么将清空原文件
(ios::ate|ios::in–>在原文件尾追加内容;ios::ate—>清空原文件,ios::out是默认必带的,可加上也可不加,对程序无影响)