Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中存储大型对称稀疏矩阵的最有效方法_Python_Matrix_Numpy_Sparse Matrix - Fatal编程技术网

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

python中存储大型对称稀疏矩阵的最有效方法,python,matrix,numpy,sparse-matrix,Python,Matrix,Numpy,Sparse Matrix,我当时正在起草/测试一项我设计的技术,用于解决速度和效率的微分方程 它需要存储、操作、调整大小,并且(在某些时候)可能需要对非常大的稀疏矩阵进行对角化。我希望能够有由零和几个组成的行(例如使用)。您可以使用字典和元组访问数据: >>> size = (4,4) >>> mat = {} >>> mat[0,1] = 3 >>> mat[2,3] = 5 >>> for i in range(size[0])

我当时正在起草/测试一项我设计的技术,用于解决速度和效率的微分方程


它需要存储、操作、调整大小,并且(在某些时候)可能需要对非常大的稀疏矩阵进行对角化。我希望能够有由零和几个组成的行(例如使用)。

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

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

顺便说一句,您也可以使用lib中的
scipy.sparse
对称稀疏矩阵最有效的存储方法可能是(例如,英特尔MKL就是这样使用的).AFAIK
scipy.sparse
不包含稀疏对称矩阵格式。但是,使用Pysparse,您可以使用链接列表格式增量构建矩阵,然后将矩阵转换为稀疏天际线格式。就性能而言,我通常发现Pysparse在大型稀疏系统中优于scipy,并且构建块(矩阵积、特征值解算器、直接解算器、迭代解算器)目前,虽然例程的范围可能比scipy中可用的要小一些。

矩阵有多大?您调查过numpy吗?或者尝试过吗?我预期会出现这样的情况:我使用过numpy和一点scipy。我主要想检查这些确实是最具可扩展性的选项,以及有关usin的任何提示g的gpu。好的,如果这将是最有效的,那就这样吧。谢谢,我主要是想检查模糊的答案。我会再给这个问题一个小时左右,看看是否有其他答案弹出,然后我会将此标记为已解。谢谢。@Feynman稀疏矩阵类应该过度隐藏
\uuGetItem\uuuuuuuuuuu
方法,当e没有数据谢谢你的提示。我对python还是相当陌生。我一定会重写getitem方法。我想我会将稀疏类建立在scipy稀疏类的基础上,并修改一些内置内容。