1

HDF を使用して、1e6 x 1e6 の浮動小数点数のような非常に大きな行列を格納することを計画しています。

連続する行または列のバッチでマトリックスを読み取る必要があります。

私の質問は、速度を最大化するために HDF ファイルを構造化/微調整する最適な方法は何でしょうか?

いくつかのポイント:

  • 私のシステムでは、HDF で圧縮されていない完全な行列の読み取り/書き込みに約 5 時間かかると見積もっています。これは合理的ですが、サイズが数テラバイトになるため、行列を圧縮せずに保存するのは合理的ではありません。

  • 行列が疎の場合、圧縮によって読み取り速度が、圧縮されていない密な行列の読み取りと同等またはそれ以上になる可能性がありますか?

  • 元の行列から行/列を読み取ったり、行列の乗算などを行うのが複雑になるため、行列を個別のサブ行列データセットに分割するのは面倒です。したがって、可能であればこれを避けたいと思います(これにより速度が大幅に向上する場合を除きます)。

  • マトリックスを一度読んだら、何度も読むつもりです。したがって、読み取り/解凍速度は、書き込み/圧縮速度よりも重要です。

  • hdfとのインターフェースにpython h5pyを使用しています。

4

1 に答える 1

0

scipy.sparse の lil_matrix など、すでにスパース表現を使用していると思います。

もっともらしい選択肢が 2 つあると思います

1) cPickle.dump を使用してバイナリ コンテンツをファイルにダンプできます。たとえば、 Python: how do you store a sparse matrix using python? を参照してください。

2) cPickle を使用して、cPickle.dumps を使用してコンテンツを文字列にダンプし、その後 h5py を文字列として使用してコンテンツを保存できます。

一般に、膨大な量のデータを処理するにはコストがかかります。たとえば、lil_matrix を使用する場合、コストがかかるのはマトリックスに対する操作であり、ディスクへの読み取り/書き込みには、データが表現されている方法で格納するのに必要な時間がかかります。生の C ファイルに文字列を含む HDF5 を使用するオーバーヘッドはありません (圧縮をオフにすると)。サイズがあまり縮小されないため、式をオフにすることをお勧めします(すでにスパースです)。

于 2014-04-15T14:42:07.887 に答える