我正在尝试 cPickle 一个大的 scipy 稀疏矩阵以备后用。我收到此错误:
File "tfidf_scikit.py", line 44, in <module>
pickle.dump([trainID, trainX, trainY], fout, protocol=-1)
SystemError: error return without exception set
trainX
是大型稀疏矩阵,另外两个是 600 万元素长的列表。
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.6GB,而我的笔记本电脑上有 16GB RAM。
我想我遇到了一个已知的 cPickle 内存错误,它不适用于太大的对象。我也尝试了 marshal
但我认为它不适用于 scipy 矩阵。有人可以提供一个解决方案,最好是一个关于如何加载和保存这个的例子吗?
python 2.7.5
Mac 操作系统 10.9
谢谢。
最佳答案
我遇到了一个数 GB 的 Numpy 矩阵问题(Ubuntu 12.04 和 Python 2.7.3 - 似乎是这个问题:https://github.com/numpy/numpy/issues/2396)。
我已经使用 numpy.savetxt()
/numpy.loadtxt()
解决了这个问题。矩阵被压缩并在保存时添加 .gz 文件扩展名。
因为我也只有一个矩阵,所以我没有研究 HDF5 的使用。
关于python - 保存大型 Scipy 稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19794249/