0

12 GRAMを搭載したwindow764ビットOSマシンを使用して、csvファイル(20332 * 17009)から大きなPython配列を読み込みました。次の例のように、配列の値は半分になります。配列全体ではなく、分析用の値がある配列のみが必要です。

[0 0 0 0 0 0

0 0 0 3 8 0

0 4 2 7 0 0

0 0 5 2 0 0

0 0 1 0 0 0]

私は疑問に思っています:分析のために0の値を無視して、より多くのメモリを節約することは可能ですか?

前もって感謝します!

4

1 に答える 1

2

あなたの説明を考えると、スパース表現はあまり役に立たないかもしれません。ただし、他にも多くのオプションがあります。

  1. 可能な限り最小のデータ型を使用して値が表されていることを確認してください。上記の例は、1 バイト整数として表すのが最適です。numpy 配列または Python 配列に読み込むと、データ型を適切に制御できます。

  2. 一度にデータの一部を読み取るだけで、メモリとパフォーマンスを交換できます。データセット全体を CSV ではなくバイナリとして書き直すと、mmap を使用して、既にメモリ内にあるかのようにファイルにアクセスできます (これにより、読み書きも高速になります)。

  3. メモリ内のデータセット全体が本当に必要な場合 (実際には収まらない場合)、何らかの圧縮が必要になる場合があります。疎行列はオプションです(コメントで言及されているように、scipyとpandasの両方に疎行列の実装があります)が、これらはゼロ値エントリの割合が大きい場合にのみ役立ちます。より良い圧縮オプションは、データの性質によって異なります。配列をチャンクに分割し、RLE、SZIP などの高速圧縮アルゴリズムで圧縮することを検討してください。

于 2013-01-14T00:42:07.607 に答える