给定一个稀疏矩阵M
,它是32x24
我试图创建一个这种形式的更大的稀疏矩阵:
A = [[O(32),M],[t(M),O(24)]]
此处O(n)
是维度nxn
的零稀疏矩阵。
M
本身就是一个块矩阵:
M = [[m.aa,m.ab],[m.ba,m.bb]]
其中m.ij
为16x12
。
我正在使用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
。
我可以创建blockmatrix
和use.as.blockmatrix=FALSE
,但O(32)
会向我显示错误消息O(24)
,因此我无法将其用于阻止t(M)
: (
argument is not a matrix
可能由以下内容构成:
A(2,1)
答案 0 :(得分:1)
这可能有点尴尬,但您可以使用blockmatrix
,rBind()
和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))
)