【问题标题】:Save Large Scipy Sparse Matrix保存大型 Scipy 稀疏矩阵
【发布时间】:2013-11-16 15:17:58
【问题描述】:

我正在尝试 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 是大型稀疏矩阵,另外两个是 6 百万个元素长的列表。

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 OS 10.9

谢谢。

【问题讨论】:

标签: python scipy sparse-matrix pickle


【解决方案1】:

我在使用多 GB 的 Numpy 矩阵时遇到了这个问题(Ubuntu 12.04 和 Python 2.7.3 - 似乎是这个问题:https://github.com/numpy/numpy/issues/2396)。

我已经使用numpy.savetxt() / numpy.loadtxt() 解决了这个问题。矩阵被压缩,保存时添加 .gz 文件扩展名。

因为我也只有一个矩阵,所以我没有研究 HDF5 的使用。

【讨论】:

    【解决方案2】:

    numpy.savetxt(仅适用于数组,不适用于稀疏矩阵)和 sklearn.externals.joblib.dump(酸洗,慢得要命,而且会占用大量内存)在 Python 2.7 上对我不起作用。

    相反,我使用了scipy.sparse.save_npz,它工作得很好。请记住,它仅适用于 csccsrbsrdiacoo 矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2017-03-26
      • 2017-03-31
      • 2023-04-10
      • 2017-07-21
      相关资源
      最近更新 更多