【问题标题】:Memory efficient storage of many large scipy sparse matrices许多大型scipy稀疏矩阵的内存高效存储
【发布时间】:2012-10-14 05:41:36
【问题描述】:

我需要存储大约 50.000 个 scipy 稀疏 csr 矩阵,其中每个矩阵是一个长度为 370 万的向量:

x = scipy.sparse.csr_matrix((3.7Mill,1))

我目前将它们存储到一个简单的字典中,因为我还需要知道每个向量对应的键(在这种情况下,键只是一个简单的整数)。

现在的问题是需要大量的内存。有没有更有效的方法?

【问题讨论】:

  • 您可以将它们存储在单个矩阵中,而不是 50k 中。您也可以使用较小的dtype。你需要这些矩阵做什么?
  • 谢谢,这么简单,我想我现在已经解决了我的问题。 ;)

标签: python memory dictionary scipy sparse-matrix


【解决方案1】:

尝试使用Lazy 数据结构。

例如:

def lazy(func):
    def lazyfunc(*args, **kwargs):
        temp = lambda x : func(*args, **kwargs)
        temp.__name__ = "lazy-" + func.__name__
        return temp
    return lazyfunc

"""
Add some simple functions
"""
def add(x, y):
    print "Not lazy"
    return x + y

@lazy
def add_lazy(x, y):
    print "lazy!"
    return x + y

用法:

>>> add(1, 2)
Not lazy
3
$ add_lazy(1, 2)
<function lazy-add_lazy at 0x021E9470>
>>> myval = add_lazy(1, 2)
>>> myval()
lazy!
3

看看:

【讨论】:

  • 感谢您的提示,听起来很有希望。如果我理解这个权利,这个方法会推迟执行,直到需要它。但在我的情况下,我也预先填充了稀疏矩阵,然后将其传递给字典。所以我创建了这 50k 个稀疏向量,填充它们,然后将它们添加到字典中。这种惰性方法也可以吗?
  • 当然,为什么不呢?显然应该不会出现问题。
猜你喜欢
  • 2013-11-16
  • 2018-12-24
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2017-02-17
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多