当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R pack 压缩和非压缩密集矩阵的表示


R语言 pack 位于 Matrix 包(package)。

说明

pack() 将密集对称矩阵和密集三角矩阵从未压缩格式(存储完整矩阵)强制转换为压缩格式(仅存储上下三角形之一)。 unpack() 执行反向强制转换。这两种格式由虚拟类 "packedMatrix""unpackedMatrix" 形式化。

用法

pack(x, ...)
## S4 method for signature 'dgeMatrix'
pack(x, symmetric = NA, upperTri = NA, ...)
## S4 method for signature 'lgeMatrix'
pack(x, symmetric = NA, upperTri = NA, ...)
## S4 method for signature 'ngeMatrix'
pack(x, symmetric = NA, upperTri = NA, ...)
## S4 method for signature 'matrix'
pack(x, symmetric = NA, upperTri = NA, ...)

unpack(x, ...)

参数

x

稠密对称或稠密三角矩阵。

对于pack()

通常是 "unpackedMatrix" 或标准 "matrix" ,但允许使用 "packedMatrix" 并原样返回。

对于unpack()

通常是 "packedMatrix" ,尽管 "unpackedMatrix" 是允许的并且返回不变。

symmetric

逻辑(包括 NA )可选地指示 x 是否对称(或三角形)。

upperTri

(仅适用于三角形x)逻辑(包括NA)指示x是否是上(或下)三角形。

...

传入或传出其他方法的进一步参数。

细节

pack(x) 检查矩阵 x 不是从虚拟类之一继承 "symmetricMatrix" "triangularMatrix" 的对称性(通过 isSymmetric() )。然后进行上三角和下三角(通过 isTriangular() )以确定合适的强制。将 symmetricupperTri 之一或两者设置为 TRUEFALSE 而不是 NA 允许跳过已知对称或(上或下)三角形的大型矩阵的不相关测试。

用户不应假设pack()unpack() 是逆运算。具体地,y <- unpack(pack(x))可能无法再现identical()意义上的"unpackedMatrix" x。请参阅示例。

对于pack()

"packedMatrix" 给出 x 的压缩表示。

对于unpack()

"unpackedMatrix" 给出 x 的完整存储表示。

例子


showMethods("pack")
(s <- crossprod(matrix(sample(15), 5,3))) # traditional symmetric matrix
(sp <- pack(s))
mt <- as.matrix(tt <- tril(s))
(pt <- pack(mt))
stopifnot(identical(pt, pack(tt)),
	  dim(s ) == dim(sp), all(s  == sp),
	  dim(mt) == dim(pt), all(mt == pt), all(mt == tt))

showMethods("unpack")
(cp4 <- chol(Hilbert(4))) # is triangular
tp4 <- pack(cp4) # [t]riangular [p]acked
str(tp4)
(unpack(tp4))
stopifnot(identical(tp4, pack(unpack(tp4))))

z1 <- new("dsyMatrix", Dim = c(2L, 2L), x = as.double(1:4), uplo = "U")
z2 <- unpack(pack(z1))
stopifnot(!identical(z1, z2), # _not_ identical
          all(z1 == z2)) # but mathematically equal
cbind(z1@x, z2@x) # (unused!) lower triangle is "lost" in translation

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Representation of Packed and Unpacked Dense Matrices。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。