python - 保存大型 Scipy 稀疏矩阵

标签 python scipy sparse-matrix pickle

我正在尝试 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/

相关文章:

python - TensorFlow 失败前提条件错误 : iterator has not been initialized

python - 如果一个字典的键等于另一个字典的值,合并两个字典的最快方法是什么?

python - 对 NumPy 数组执行运算,但从这些运算中屏蔽沿对角线的值

python - 访问 scipy.sparse.csr_matrix,所有行都没有零列 j

matlab - matlab如何求解大型、对称和稀疏线性系统

python - 大型二维 numpy 数组中相同元素的高效成对计算

python - 使用 Selenium 等待 html 的更改

python - 将 OpenCV 输出发送到 VLC 流

Python:如何从非标准柯西分布中随机抽样,因此具有不同的参数?

python - 如何使用好 scipy.optimize.fmin