データ保存とmetadata
計算結果は、後から確認できる形で保存します。画面への出力だけでは、条件を変えて比較したり、同じデータから図を作り直したり、他の言語で解析したりすることが難しくなります。
表形式データ
時系列や少数列の結果は、CSVで保存すると扱いやすいです。
t,energy,magnetization
0.0,-1.24,0.83
0.1,-1.25,0.82
CSVはgnuplot、Python、Julia、表計算ソフトなどから読みやすいため、最初の保存形式として適しています。
多次元配列
格子上の場、波動関数、画像、相関関数などの多次元配列では、CSVはあまり適していません。形状、軸、データ型を別に管理する必要があり、ファイルサイズも大きくなりやすいためです。
このような場合は、次の形式を検討します。
- HDF5
- NumPy形式(
.npy,.npz) - 必要に応じた独自binary形式
HDF5やNumPy形式は、多くの言語やツールから読み書きしやすい形式です。Rust側で計算し、保存したデータをPythonやJuliaで解析する流れにも向いています。
metadata
数値データだけでなく、実行条件も保存します。例えば、次のような情報です。
- 入力パラメータ
- 格子サイズ、shape、axisの意味
- 時間刻み、空間刻み
- 境界条件
- 乱数seed
- crate version、Rust version
- 出力ファイル名
- 実行日時
metadata は、JSON、TOML、YAMLなどのテキスト形式で保存すると確認しやすいです。
{
"model": "ising_2d",
"lattice_size": [64, 64],
"temperature": 2.269,
"seed": 12345,
"output": "samples.npy"
}
compute と plot を分ける
本書では、計算、保存、可視化を分けます。
- Rustで計算する。
- 結果とmetadataを保存する。
- 保存済みデータから図を作る。
- 図と数値を使って検証する。
この流れにすると、AI agent に入出力コードやプロット用スクリプトを任せやすくなります。ただし、保存する列、axis、単位、境界条件、検証対象が正しいかは人間が確認します。