在1-D向量中转换对角稀疏矩阵

时间:2015-09-30 14:20:40

标签: python arrays numpy scipy sparse-matrix

我有一个大的n平方对角矩阵,采用scipy的稀疏DIA格式 (让我们说n = 100000) D_sparse = sprs.diags(np.ones(100000),0)

我想将对角线检索为矢量(在numpy数组中)

但是,如果我np.diag(D_sparse.toarray()),我有一个MemoryError,因为D_sparse.toarray()会生成一个大满为0的大数组。

我有一个方法或函数直接将D_sparse的对角线作为一个numpy数组?

1 个答案:

答案 0 :(得分:2)

dia_matrix对象的diagonal方法返回主对角线。

例如,

In [165]: d
Out[165]: 
<6x6 sparse matrix of type '<class 'numpy.float64'>'
    with 6 stored elements (1 diagonals) in DIAgonal format>

In [166]: d.A
Out[166]: 
array([[ 10.,   0.,   0.,   0.,   0.,   0.],
       [  0.,  11.,   0.,   0.,   0.,   0.],
       [  0.,   0.,  12.,   0.,   0.,   0.],
       [  0.,   0.,   0.,  13.,   0.,   0.],
       [  0.,   0.,   0.,   0.,  14.,   0.],
       [  0.,   0.,   0.,   0.,   0.,  15.]])

In [167]: d.diagonal()
Out[167]: array([ 10.,  11.,  12.,  13.,  14.,  15.])