在Python中高效存储大型对称稀疏矩阵的方法
我在研究一种我自己想出来的技术,目的是为了更快更有效地解决微分方程。
这个技术需要处理一些非常大的稀疏矩阵,也就是大部分元素都是零,只有少数几个元素是1(比如说少于5个)。我希望能存储、操作、调整这些矩阵的大小,并且可能还需要把它们对角化。我想一次性添加几行数据,数量大概和我使用的CPU数量差不多。
我觉得使用GPU加速会很有帮助,所以如果有人能给我一些建议,告诉我怎么最好地利用这一点,比如使用pycuda、theano等工具,我会非常感激。
3 个回答
3
使用 scipy.sparse 这个库。
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
当然,你应该为此创建一个类,并添加你需要的方法:
class Sparse(dict):
pass
顺便提一下,你还可以使用来自 scipy 库的 scipy.sparse