高效存储大型稀疏矩阵(float)

2024-05-14 19:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个解决方案来存储大约1000万个浮点数(双精度)的稀疏矩阵。这个矩阵实际上是一个由一百万乘一百万个元素组成的二维三角形矩阵。元素(i,j)是元素i和元素j之间的实际分数度量score(i,j)。存储方法必须允许快速访问这些信息,可能是通过内存映射包含矩阵的文件。我当然不想把所有的文件都载入内存。在

class Score(IsDescription):
    grid_i = UInt32Col()
    grid_j = UInt32Col()
    score  = FloatCol()

我尝试使用Score类作为公开的pytables,但是如果不扫描所有行,就无法直接访问元素i,j。有什么建议吗?在


Tags: 文件方法内存元素度量精度矩阵解决方案
2条回答

1000万个双精度浮点占用80MB内存。如果以CSR or CSC格式将它们存储在一个100万×100万的稀疏矩阵中,则需要额外的1100万个int32,总共大约125mb。这可能不到系统中物理内存的7%。根据我的经验,在一个运行32位版本python的4GB系统上,在分配数组时很少会遇到问题,除非您尝试获得10倍的内存。在

在计算机上运行以下代码:

for j in itertools.count(100) :
    try :
        a = np.empty((j * 10**6,), dtype='uint8`)
        print 'Allocated {0} MB of memory!'.format(j)
        del a
    except MemoryError:
        print 'Failed to allocate {0} MB of memory!'.format(j)
        break

除非它不能让你至少得到上面计算的4倍的数量,否则不要犹豫使用scipy.sparse格式将整个内容粘贴到内存中。在

我对pytables没有经验,对numpy的memmap数组也没有太多的经验。但在我看来,其中任何一个都会涉及到你编写处理稀疏性的逻辑,除非不可能,否则我会尽量避免这种情况。在

您应该使用^{}Here's关于格式和用法的更多信息。在

相关问题 更多 >

    热门问题