我正在使用Anaconda分发的Python和Numba,我编写了以下Python函数,它将稀疏矩阵A(以CSR格式存储)乘以密集向量x:
@jit
def csrMult( x, Adata, Aindices, Aindptr, Ashape ):
numRowsA = Ashape[0]
Ax = numpy.zeros( numRowsA )
for i in range( numRowsA ):
Ax_i = 0.0
for dataIdx in range( Aindptr[i], Aindptr[i+1] ):
j = Aindices[dataIdx]
Ax_i += Adata[dataIdx] * x[j]
Ax[i] = Ax_i
return Ax
Run Code Online (Sandbox Code Playgroud)
这A是一个大的scipy稀疏矩阵,
>>> A.shape
( 56469, 39279 )
# having ~ 142,258,302 nonzero entries (so about 6.4% )
>>> type( A[0,0] )
dtype( 'float32' )
Run Code Online (Sandbox Code Playgroud)
并且 …
如果在scipy.sparse文档中清楚地解释了这一点,我很抱歉.
当使用scipy时,你会建议使用什么函数来求解稀疏正定线性方程组?我想使用直接方法,并且我希望对列进行重新排序,以便在系数矩阵的Cholesky分解中尽可能地保留稀疏性.理想情况下,我可以尝试各种重新排序选项.
scipy.sparse中是否存在稀疏正定系统的直接求解器?是scikit.sparse的方式吗?
假设B是Matlab中稀疏矩阵的单元阵列,我想形成一个稀疏块对角矩阵M,其对角块是存储在B中的矩阵.最简单/最有效的方法是什么?