【发布时间】:2018-01-19 04:32:58
【问题描述】:
给定一个稀疏矩阵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 包用于 sparsematrix 和 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) :(
A 可以用类似的东西构造:
Mt<-t(M)
O32<-rsparsematrix(nrow=32,ncol=32,nnz=0)
O24<-rsparsematrix(nrow=24,ncol=24,nnz=0)
A<-blockmatrix(dim=c(2,2),names=c("RR","BR","RB","BB"), RR=O32,RB=M,BR=Mt,BB=O24)
【问题讨论】:
-
mij.rowCount和mij.colCount是什么? -
M <- cBind(rBind(m.aa,m.ba),rBind(m.ab,m.bb))工作吗? -
@BenBolker 已修复,关于那些常量名称。
rbind,cbind似乎适用于M,但A需要一个技巧,因为尺寸不匹配。
标签: r sparse-matrix