首页 > 解决方案 > 仅在 dok_matrix 对象的一部分上使用 scipy.sparse.dok_matrix.setdiag

问题描述

假设我有一个(非常大的)稀疏矩阵作为 scipy.sparse.dok_matrix 对象。我想仅将子矩阵的对角线设置为某个值。我首先认为这样的事情会起作用:

import scipy.sparse as sp

dim = 20 # dim can go up to large numbers
A = sp.dok_matrix((num, num))
A[num//2:-1,num//2:-1].setdiag(2)

,但这只会导致一个空矩阵(因为矩阵在内部使用数组存储的方式,我想?)。我知道对于这个小例子,我可以setdiag在整个矩阵上使用并在开头插入一个带有零的数组,但这对于更大的矩阵维度是不够的,因为数组会变得太大。我也试过:

A[num//2:-1,num//2:-1] = 2*sp.eye((num-1)//2)

这做了我想做的事,但太慢了。有没有办法更快地获得相同的结果(即不明确设置子矩阵的所有条目)?

标签: pythonpython-3.xscipy

解决方案


推荐阅读