4 つの列 ("g_Grid.r"、"g_Grid.t"、"g_Grid.b"、"g_Grid.ph") を持つマトリックスを記述する必要があります。
通常、ファイル ストリームを使用してファイルに書き込みます。
ofstream fout;
fout.open("GRID.dat");
for (int m=0;m<N_PH;++m)
{
for (int k=0;k<N_B;++k)
{
for (int j=0;j<N_T;++j)
{
for (int i=0;i<N_R;++i)
{
fout << setprecision(32) << g_Grid.r[i]<<" "<<g_Grid.t[j]<<" "<<g_Grid.b[k]<<" "<<g_Grid.ph[m]<< endl;
}
}
}
}
fout.close();
正常に動作しますが、現在、非常に大きな (長い) マトリックスを扱っており、フォーマットされた出力 (".txt") を書き込むのに時間がかかります。ファイルをフォーマットする必要は本当にないので、バイナリファイルとして書き込むことを好みます。
質問: 4 つのベクトル/配列 (r、t、b、ph) が与えられた場合、テーブルをバイナリ ファイルに書き込む方法は? (後でこのファイルを読み取るために matlab を使用し、バイナリ テーブルとして読み取る必要もあります)
編集
通常、次の単純なコードを使用してバイナリ ファイルを書き込みます。
ofstream myFile (fileName, ios::out | ios::binary);
double val;
for (int m=0;m<N_PH;++m)
{
for (int k=0;k<N_B;++k)
{
for (int j=0;j<N_T;++j)
{
for (int i=0;i<N_R;++i)
{
val = g_N.Amp[m][k][j][i];
myFile.write(reinterpret_cast<const char*>(&val), sizeof(val));
}
}
}
}
myFile.close();
しかし、これは後でmatlabによって読み取られる間、「1列」しか得られません。