3

後で使用するために、大きな scipy スパース行列を cPickle しようとしています。このエラーが発生しています:

  File "tfidf_scikit.py", line 44, in <module>
    pickle.dump([trainID, trainX, trainY], fout, protocol=-1)
SystemError: error return without exception set

trainXは大きな疎行列で、他の 2 つは 6mil 要素の長さのリストです。

In [1]: trainX
Out[1]:
<6034195x755258 sparse matrix of type '<type 'numpy.float64'>'
    with 286674296 stored elements in Compressed Sparse Row format>

この時点で、Python の RAM の使用量は 4.6 GB で、私のラップトップには 16 GB の RAM があります。

cPickle が大きすぎるオブジェクトで動作しないという既知のメモリ バグが発生していると思います。私も試しmarshalてみましたが、scipy マトリックスではうまくいかないと思います。誰かがこれをロードして保存する方法の解決策とできれば例を提供できますか?

パイソン 2.7.5

Mac OS 10.9

ありがとうございました。

4

2 に答える 2

1

マルチギガバイトの Numpy マトリックスでこの問題が発生しました (Python 2.7.3 を使用した Ubuntu 12.04 - この問題のようです: https://github.com/numpy/numpy/issues/2396 )。

numpy.savetxt()/を使用して解決しましたnumpy.loadtxt()。マトリックスは、保存時に .gz ファイル拡張子を追加して圧縮されます。

私もマトリックスが 1 つしかないので、HDF5 の使用については調査しませんでした。

于 2013-11-30T14:54:49.360 に答える