10

私はpythonが初めてです。aのような次元の大きな配列 が(43200, 4000)あり、将来の処理で必要になるため、これを保存する必要があります。で保存しようとするとnp.savetxt、txt ファイルが大きすぎて、同じサイズの 5 つのファイルを処理する必要があるため、プログラムでメモリ エラーが発生します。巨大な配列を保存してメモリの消費を抑える方法はありますか?

ありがとう。

4

2 に答える 2

12

データをテキスト ファイルに保存するのは非常に非効率的です。Numpy には組み込みの保存コマンドsavesavez/savez_compressedがあり、大きな配列の保存に適しています。

データの使用方法に応じて、HDF5 形式 (h5py または pytables) も検討する必要があります。これにより、すべてをメモリにロードすることなく、大きなデータ セットを格納できます。

于 2013-09-10T18:18:45.080 に答える
4

PyTables を使用して、Hierarchical Data Format (HDF) ファイルを作成し、データを格納できます。これにより、作業中のオブジェクトを保存先のファイルにリンクする、いくつかの興味深いメモリ内オプションが提供されます。

これを行う方法を示す別の StackOverflow の質問を次に示します。「PyTables に NumPy 多次元配列を格納する方法」。

配列を Pandas DataFrame オブジェクトとして使用する場合は、PyTables / HDF5 への Pandas インターフェイスを使用することもできます。

import pandas
import numpy as np
a = np.ones((43200, 4000)) # Not recommended.
x = pandas.HDFStore("some_file.hdf")

x.append("a", pandas.DataFrame(a)) # <-- This will take a while.
x.close()

# Then later on...
my_data = pandas.HDFStore("some_file.hdf") # might also take a while
usable_a_copy = my_data["a"] # Be careful of the way changes to
                             # `usable_a_copy` affect the saved data.

copy_as_nparray = usable_a_copy.values

このサイズのファイルでは、先に進む前にすべての配列を消費するのではなく、並列アルゴリズムを使用してアプリケーションを実行し、大きな配列のサブセットのみに適用できる可能性があるかどうかを検討できます。

于 2013-09-10T18:20:20.567 に答える