3

2つの巨大な行列(10 * 25,000,000)の間で通常の行列乗算を生成しようとしています。そうすると記憶がなくなります。numpyのmemmapを使用してこれを処理するにはどうすればよいですか?これもいい考えですか?操作の速さはあまり気にせず、しばらく待つという意味でも結果が欲しいだけです。よろしくお願いします!

8 GBのRAM、I7-2617M 1.5 1.5 ghz、Windows764ビット。私はすべての64ビットバージョンを使用しています:python(2.7)、numpy、scipy。

編集1:

多分h5pyはより良いオプションですか?

4

2 に答える 2

2

np.memmapを使用して、一度に 1 要素ずつ 10x10 出力行列を計算してみてください。

したがって、最初の行列の最初の行と 2 番目の行列の最初の列を読み込むだけですnp.sum(row1 * col1)

于 2012-08-24T13:42:13.517 に答える
1

numpy.memmap と numexpr を試してください! これは、メモリ xD なしでディスクと CPU キャッシュを使用して動作します。fortran ループに似ています。ここにいくつかのコードがあります: python - memmaps と CPU で作業しながら行列の乗算と削減を高速に行う方法。ただし、作成されるファイルのサイズに注意してください。それらが一時ファイルのみの場合は、後で削除します。そうでない場合は、圧縮 9x の pandas.hdf5 ファイルと組み合わせるのが最善だと思います。したがって、data.tofile を作成し、memmap で読み込み、計算し、memmap を pandas.hd5f に保存し、memmap を削除します。データを1行に保存することも、必要なスペースが少ないhdf5ファイルのオプションです-どこかで読んだと思います。また、numpy を使用して 1 行のデータを memmap すると、適切な順序で形状を与えるだけで、numpy memmap はその 1 行のデータを選択した形状で読み取ります。

于 2015-09-14T13:05:34.707 に答える