科学データを保存するための NetCDF と HDF5 についての意見はありますか?

StackOverflow https://stackoverflow.com/questions/1075074

  •  21-08-2019
  •  | 
  •  

質問

科学データを保存する方法として NetCDF と HDF5 についてプラス/マイナスを言えるほどの経験がある人はいますか?

HDF5 を使用したことがあり、Java 経由で読み取り/書き込みをしたいと考えていますが、インターフェイスは基本的に C ライブラリのラッパーであり、わかりにくいと感じています。そのため、NetCDF は興味をそそられるように思えますが、それについてはほとんど何も知りません。

編集: 私のアプリケーションはデータログ「のみ」なので、自己記述形式のファイルを取得します。私にとって重要な機能は、任意のメタデータを追加できること、バイト配列に追加するための高速書き込みアクセスができること、および単一ライター/複数リーダーの同時実行性 (強く推奨されますが必須ではありません) であることです。NetCDF のドキュメントには SWMR があると記載されていますが、2 人のライターが同じファイルを同時に開いて悲惨な結果を招くことがないようにするためのメカニズムをサポートしているかどうかについては記載されていません)。私は HDF5 の階層的な側面が好きです (特に 「通常の」ファイルシステムのような階層よりもはるかに柔軟な有向非巡回グラフ階層)、今 NetCDF ドキュメントを読んでいます...ファイルごとに 1 つのデータセットしか許可しない場合は、おそらく機能しません。:(

アップデート — のように見えます NetCDF-Java netCDF-4 ファイルから読み取りますが、階層グループをサポートしない netCDF-3 ファイルからのみ書き込みます。くそー。

更新 2009 年 7 月 14 日:Java の HDF5 に本当に腹が立ち始めています。利用可能なライブラリはそれほど優れたものではなく、Java の抽象化層 (複合データ型) に関連する大きな障害がいくつかあります。C にとっては素晴らしいファイル形式ですが、どうやら負けたようです。>:(

役に立ちましたか?

解決

NetCDF ではなく HDF5 を強くお勧めします。NetCDF はフラットですが、内容を分類できないと、しばらくすると非常に汚くなります。もちろん、分類についても議論の余地はありますが、少なくともこの柔軟性はあります。

HDF5 と HDF5 の正確な評価を実行しました。Q5Cost を書いたときは NetCDF でしたが、最終結果は間違いなく HDF5 でした。

他のヒント

長期的には、HDF5 を使用する方がはるかに簡単であることを認めざるを得ません。単純なデータ構造を NetCDF 形式に変換するのは難しくありませんが、その後のデータ構造の操作は少々面倒です。

HDF5 の「H」は「階層的」を表しており、これは (私にとってはとにかく) ノードを移動したり、他の場所のノードを参照したりするだけで、データを操作する非常に簡単な方法に変換されます。

これはどのようなプロジェクトなのか聞いてもいいですか?私はこれらを両方とも、多くの HPC 科学モデリング タスクに使用します。あなたも同じことをしていると考えていいですか?もしそうなら、私が見ているトレンドは人々が HDF5 に移行しているということですが、特定のドメインでは異なるかもしれません。

最終的には行くことになりますが、頑張ってください!

バージョン 4.0 (2008) 以降の NetCDF は、ほとんどの HDF5 ファイルの読み取りと書き込みが可能で、拡張されたデータ モデルを介して HDF5 の階層機能へのアクセスを提供します。

HDF5 は非常に機能が豊富で、優れたパフォーマンス機能がいくつかあります。

NetCDF には、よりシンプルな API と、より幅広いツール ベースがあります。netCDF データを処理するツールは数多くあります。

これが古い投稿であることは承知しており、元の投稿者は次の記事に移ったことを示していますが、ここにたどり着く人のために...netCDF-Java ライブラリ (4.3.13 時点) は、 netCDF C ライブラリ。まだベータ版ですが、実際に動作します フィードバック 確かに喜ばれます!

netCDF-Java を参照してください。 参照 詳細についてはドキュメントを参照してください。

それぞれで小さなサンプル アプリケーションを作成して、エクスペリエンスを比較してみてください。(MPI などによる) 並列実行に対するコードの将来のスケーラビリティが重要である場合、HDF には並列実装があり、人々が常に改善に取り組んでいることを私は知っています。NetCDFについてはよくわかりません。

後期編集:NetCDF の場合は、次のようになります。 並列 NetCDF アルゴンヌ出身。これは非常にうまく機能しており、開発チームはこれをさらに改善するために非常に積極的に取り組んでいます。

1) Netcdf-4 C ライブラリは、HDF-5 C ライブラリの上位層です。API は HDF5 ライブラリよりも単純であると考えられていますが、最終的にはほぼ同じ機能が得られます。Netcdf はグラフをサポートしていませんが、HDF5 はグラフをサポートしています。実際、HDF はグラフ内のサイクルを妨げないと思います。

2) HDF グループには、HDF-5 C ライブラリの上に Java API があります。

3) Unidata には純粋な Java である Netcdf-Java ライブラリがありますが、HDF-5 しか読み取れません。

HDF5 を独自のデータ モデルに変換する NetCDF は、見た目も動作も優れています... NetCDF が符号なしの値をサポートしていないことがわかるまで!こちらも参照 私の質問 NetCDF を使用して既存の HDF5 ファイル内の符号なし値を検出する方法について説明します。

アップデート: 実際、NetCDF-3 は符号付き値をサポートしていませんが、NetCDF-4 は符号付き値をサポートしています。ただし、符号付きかどうかを判断するための Java の NetCDF API は次のとおりです。 少し複雑な.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top