我有一个大的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数组?
答案 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.])