0

私は pytables と HDF5 データで多くの作業を行っていますが、ノードの属性 (pytables 'node._v_attrs' プロパティを介してアクセスする属性) に関して質問があります。

hdf5ノードのそのような属性を設定したとします。特定の属性を設定して、それを何度も繰り返します

(1) 常に同じ値に (したがって、hdf5file に格納されている全体的な値は質的に変化しません)

(2) 常に異なる値を持つ

速度とメモリの観点からこれらの操作はどうですか? 私が言いたいのは、属性を設定することは、本当に hdf5 ファイルの属性を削除し、以前と同じ名前の新しい属性を追加することを意味するのでしょうか? もしそうなら、既存の属性をリセットするたびに、hdf5 ファイルのサイズがわずかに増加し、ハードディスクがいっぱいになるまでゆっくりと増加し続けるということですか?

これが本当なら、ケース (1) があるかどうかをリセットする前に確認する方が有益でしょうか [そして、データをまったく保存するのではなく、ディスクに書き込まれた属性と比較する必要があります]、ケース (2) に直面した場合にのみ再割り当てします。 [つまり、hdf5file の属性値は、hdf5 ファイルに書きたいものではありません]。

どうもありがとう、よろしく、ロバート

4

1 に答える 1

3

HDF5 属性へのアクセスは、非常に遅いことで知られています。HDF5 は、実際には配列データ構造のために構築されています。グループや属性などは優れたヘルパーですが、最適化されていません。

つまり、属性の読み取りは遅いですが、属性の書き込みはさらに遅くなります。したがって、あなたが提案したことを実行するために余分な努力をする価値は常にあります. 書き込む前に、属性が存在するかどうか、および目的の値があるかどうかを確認してください。これにより、毎回書き出すよりも速度が向上するはずです。

幸いなことに、ディスク上とメモリ内の両方で、属性のメモリへの影響は最小限です。これは、ノードのすべての属性が 64 kb の特別なメタデータ スペースに収まるためです。64 kb を超える属性を書き込もうとすると、HDF5 と PyTables は失敗します。

これが役立つことを願っています。

于 2013-09-05T16:24:50.987 に答える