我有一个在Numpy/Scipy中处理稀疏矩阵的简单代码,代码如下所示:
import numpy as np
import scipy as sp
from scipy.sparse import csr_matrix as sparse
from scipy.sparse import vstack
from scipy.linalg import toeplitz
N = 100
d4 = np.array([-22/24, 17/24, 9/24 ,-5/24, 1/24])
s4 = np.array([1/24,-9/8,9/8,-1/24])
n = len(s4)
r4 = sparse((s4, (np.zeros(n), np.arange(n))), shape=[1, N+1])
c4 = sparse(([s4[0]], ([0], [0])), shape=[N-2, 1])
lnd = len(d4)
rd4 = sparse((d4, (np.zeros(lnd), np.arange(lnd))), shape=[1, N+1])
D = sparse(np.concatenate((rd4.todense(), toeplitz(c4.todense(),r4.todense()), np.fliplr(rd4.todense()))))
我想删除sparse
到dense
的转换,但不知道如何用转换来替换toeplitz
函数和fliplr
。现在我有这个:
D = vstack([rd4, sparse(toeplitz(c4.todense(),r4.todense())), sparse(np.fliplr(rd4.todense()))])
当然,我可以处理非稀疏矩阵,并在最后转换,但我希望总是处理稀疏矩阵。有更好的主意吗?你知道吗
下面是如何使用
scipy.sparse.diags
。diags
与spdiags
类似,但更方便一些。你知道吗这个例子有行向量,对于列向量可以强制转换为
csc
,然后以同样的方式继续。你知道吗fliplr
可以通过索引来完成。小问题:不是所有稀疏矩阵类目前都支持索引,您可能必须强制转换。你知道吗相关问题 更多 >
编程相关推荐