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

Ale*_*des 5 python numpy matrix sparse-matrix

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

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

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

tal*_*ies 7

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


JBe*_*rdo 5

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

>>> 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
Run Code Online (Sandbox Code Playgroud)

当然,您应该为此创建一个类并添加您需要的方法:

class Sparse(dict):
    pass
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您还可以使用scipy libscipy.sparse中的