1501 行 1501 列の double の行列を含むバイナリ ファイルを読み込んで、固有行列に挿入しようとしています。これが私のコードです:
#include <fstream>
#include <iostream>
#include <Eigen/Dense>
#include <string>
using namespace std;
using namespace Eigen;
int main()
{
MatrixXd B(1501, 1501);
ifstream inputFile;
double toread;
inputFile.open("/path/to/bathymetry_S1000s2500s_E65d1000s65d2500s.bin",
ios::out | ios::in | ios::binary);
if (!inputFile) {
cout << "The file can't be opened.\n";
exit(10);
} else {
for (int i2 = 0; i2 < 1501; i2++) {
for (int i1 = 0; i1 < 1501; i1++) {
inputFile.read( reinterpret_cast<char*>( &toread ),
sizeof(toread) );
inputFile >> toread;
B(i1, i2) = toread;
}
}
inputFile.close();
}
cout << "Max value:" << B.maxCoeff() << endl; // Just to check the result
cout << "Mean Value:" << B.mean() << endl; // The same
}
私の問題は、コードを実行すると、行列 B が実際には inputFile の最初の値 (-4502) だけで満たされ、2 つの cout によって与えられることです。(行列のすべての要素は -4502 です)。各ループステップで最初から開始するのではなく、前の値の後に inputFile の読み取りを続行することをコンパイラーに理解させるにはどうすればよいですか?