在python中存储大对称稀疏矩阵的最有效方法

时间:2011-08-29 02:09:26

标签: python matrix numpy sparse-matrix

我正在起草/测试我为解决速度和效率的微分方程而设计的技术。

这需要存储,操作,调整大小和(在某些时候)可能对非常大的稀疏矩阵进行对角化。我希望能够有由零和一些(比如< 5)组成的行,并一次添加几个(按照使用的cpus数量的顺序)。

我认为让gpu加速是有用的 - 所以任何关于采取优势的方法的建议也会受到赞赏(比如pycuda,theano等)。

3 个答案:

答案 0 :(得分:7)

对称稀疏矩阵的最有效存储方法可能是sparse skyline format(例如,这是英特尔MKL使用的)。 AFAIK scipy.sparse不包含稀疏的对称矩阵格式。但是,Pysparse does。使用Pysparse,您可以使用链接列表格式逐步构建矩阵,然后将矩阵转换为稀疏天际线格式。性能方面,我通常发现Pysparse优于scipy大型稀疏系统,并且所有基本构建块(矩阵乘积,特征值求解器,直接求解器,迭代求解器)都存在,尽管例程的范围可能稍微小一点比scipy中的可用。

答案 1 :(得分:4)

您可以使用字典和元组来访问数据:

>>> size = (4,4)
>>> mat = {}
>>> mat[0,1] = 3
>>> mat[2,3] = 5
>>> for i in range(size[0]):
        for j in range(size[1]):
            print mat.get((i,j), 0) ,
        print

0 3 0 0
0 0 0 0
0 0 0 5
0 0 0 0

当然你应该为它做一个课程并添加你需要的方法:

class Sparse(dict):
    pass

BTW,你也可以使用scipy lib

中的scipy.sparse

答案 2 :(得分:3)

使用scipy.sparse