【发布时间】:2016-03-11 08:53:14
【问题描述】:
我有一个相当简单的问题,但仍然无法解决。
我想要一个块对角线 n^2*n^2 矩阵。这些块是稀疏的 n*n 矩阵,只有对角线,首先是对角线,然后是对角线。对于n=4 的简单情况,这很容易做到
datanew = ones((5,n1))
datanew[2] = -2*datanew[2]
diagsn = [-4,-1,0,1,4]
DD2 = sparse.spdiags(datanew,diagsn,n,n)
new = sparse.block_diag([DD2,DD2,DD2,DD2])
由于这只对小 n 有用,有没有更好的方法来使用 block_diag?考虑 n -> 1000
【问题讨论】:
-
我稍微清理了你的显示器。您需要更具体地说明为什么这不适用于较大的
n。 (n1是什么?)block_diag和bmat是开放的 Python 代码,因此您可以研究它们,如果需要简化操作以适应您的情况。 -
bmat最终将您的DD2转换为coo格式,将他们的data、row、col加入到 3 个大数组中,并从那个。 -
重点是我不想写block_diag(DD2,....... (DD2,:) 直到 n) ?
-
一种粗略的方法是将
DD2附加到列表中一千次,然后将该列表传递给block_diag。 -
这可以在 block_diag 中使用吗?我不确定它是否会接受列表
标签: python-2.7 scipy sparse-matrix