将稀疏矩阵作为稀疏矩阵进行阻止

时间:2017-08-10 19:21:35

标签: r sparse-matrix

给定一个稀疏矩阵M,它是32x24我试图创建一个这种形式的更大的稀疏矩阵:

A = [[O(32),M],[t(M),O(24)]]

此处O(n)是维度nxn的零稀疏矩阵。

M本身就是一个块矩阵:

M = [[m.aa,m.ab],[m.ba,m.bb]]

其中m.ij16x12

我正在使用Matrix的{​​{1}}包和sparsematrix的{​​{1}}。我遇到的一个问题是blockmatrix参数,对于普通块矩阵很好地工作,似乎不适用于块稀疏矩阵。我无法对有问题的块矩阵进行转置,这使blockmatrix的构造变得困难。

以下是我如何生成use.as.blockmatrix=FALSE

A

但是m.ij显示 m.aa<-rsparsematrix( #dimensions: nrow=16,ncol=12, nnz=20, rand.x=function(x) 1 ) m.ab<-rsparsematrix( #dimensions: nrow=16,ncol=12, nnz=10, rand.x=function(x) 1 ) m.ba<-rsparsematrix( nrow=16,ncol=12, nnz=0, rand.x=function(x) 1 ) m.bb<-m.aa M<-blockmatrix(dim=c(2,2),names=c("maa","mba","mab","mbb"), maa=m.aa,mab=m.ab,mba=m.ba,mbb=m.bb, use.as.blockmatrix=FALSE) 仍然是attr(M,"class"),即使我有M

我可以创建blockmatrixuse.as.blockmatrix=FALSE,但O(32)会向我显示错误消息O(24),因此我无法将其用于阻止t(M): (

argument is not a matrix可能由以下内容构成:

A(2,1)

1 个答案:

答案 0 :(得分:1)

这可能有点尴尬,但您可以使用blockmatrixrBind()cBind()自行将相应的块放在一起,而不是使用Matrix(0,...)

M <- cBind(rBind(m.aa,m.ba),rBind(m.ab,m.bb))   
A <- rBind(
    cBind(Matrix(0,32,32), M              ),
    cBind(t(M),            Matrix(0,24,24))
)