pMatrix-class
位于 Matrix
包(package)。 说明
pMatrix
类是置换矩阵类,存储为从 1 开始的整数置换向量。置换矩阵是一个方阵,其行和列都是标准单位向量。由此可见,置换矩阵是索引矩阵的特殊情况(因此 pMatrix
被定义为 indMatrix
的直接子类)。
将左侧矩阵乘以置换矩阵相当于对其行进行置换。类似地,将右侧矩阵乘以置换矩阵相当于置换其列。事实上,此类产品在 Matrix
中作为索引操作实现;请参阅下面的“详细信息”。
细节
根据定义,置换矩阵既是行索引矩阵又是列索引矩阵。但是,pMatrix
的perm
槽不能互换用作行索引向量和列索引向量。如果 margin=1
,则 perm
是行索引向量,对应的列索引向量可以计算为 invPerm(perm)
,即通过反转排列。类似地,如果 margin=2
,则 perm
和 invPerm(perm)
分别是列索引向量和行索引向量。
给定一个 n
-by- n
行置换矩阵 P
和 perm
槽 p
和具有一致维度的矩阵 M
,我们有
= | P %*% M | = | M[p, ] |
|
= | M %*% P | = | M[, i(p)] |
|
= | crossprod(P, M) | = | M[i(p), ] |
|
= | tcrossprod(M, P) | = | M[, p] |
|
= | crossprod(P) | = | Diagonal(n) |
|
= | tcrossprod(P) | = | Diagonal(n)
|
其中 i := invPerm
。
类中的对象
可以使用 new("pMatrix", ...)
形式的调用显式创建对象,但更常见的是通过使用 as(., "pMatrix")
形式的调用强制基于 1 的整数索引向量来创建对象;请参阅下面的“方法”。
插槽
margin
、perm
-
从超类
indMatrix
继承。这里,perm
是长度为Dim[1]
的整数向量和1:Dim[1]
的排列
.
Dim
、Dimnames
-
从虚拟超类
Matrix
继承。
扩展
直接类 "indMatrix"
。
方法
%*%
-
signature(x = "pMatrix", y = "Matrix")
和showMethods("%*%", classes = "pMatrix")
列出的其他内容:在适当的情况下作为索引操作实现的矩阵乘积。 coerce
-
signature(from = "numeric", to = "pMatrix")
:支持从正整数向量构造典型的pMatrix
,特别是1:n
的排列。假设行排列。 - t
-
signature(x = "pMatrix")
:转置,它是与perm
相同但与margin
相反的pMatrix
。与逆矩阵一致,因为置换矩阵是正交的。 - 解决
-
signature(a = "pMatrix", b = "missing")
:逆置换矩阵,它是与perm
相同但与margin
相反的pMatrix
。与转置一致,因为置换矩阵是正交的。有关更多签名,请参阅showMethods("solve", classes = "pMatrix")
。 - 行列式
-
signature(x = "pMatrix", logarithm = "logical")
:始终返回 1 或 -1,因为排列矩阵是正交的。事实上,结果正是排列的符号。
例子
(pm1 <- as(as.integer(c(2,3,1)), "pMatrix"))
t(pm1) # is the same as
solve(pm1)
pm1 %*% t(pm1) # check that the transpose is the inverse
stopifnot(all(diag(3) == as(pm1 %*% t(pm1), "matrix")),
is.logical(as(pm1, "matrix")))
set.seed(11)
## random permutation matrix :
(p10 <- as(sample(10),"pMatrix"))
## Permute rows / columns of a numeric matrix :
(mm <- round(array(rnorm(3 * 3), c(3, 3)), 2))
mm %*% pm1
pm1 %*% mm
try(as(as.integer(c(3,3,1)), "pMatrix"))# Error: not a permutation
as(pm1, "TsparseMatrix")
p10[1:7, 1:4] # gives an "ngTMatrix" (most economic!)
## row-indexing of a <pMatrix> keeps it as an <indMatrix>:
p10[1:3, ]
也可以看看
相关用法
- R printSpMatrix 灵活格式化和打印稀疏矩阵
- R pack 压缩和非压缩密集矩阵的表示
- R packedMatrix-class 压缩密集矩阵的虚拟类“packedMatrix”
- R dtrMatrix-class 三角形稠密数值矩阵
- R facmul-methods 乘以矩阵因式分解的因数
- R solve-methods 函数求解矩阵包中的方法
- R updown-methods 更新和降级稀疏 Cholesky 分解
- R bdiag 构建分块对角矩阵
- R symmetricMatrix-class 包矩阵中对称矩阵的虚拟类
- R all.equal-methods 函数 all.equal() 的矩阵封装方法
- R boolmatmult-methods 布尔算术矩阵乘积:%&% 和方法
- R ltrMatrix-class 三角密集逻辑矩阵
- R Hilbert 生成希尔伯特矩阵
- R nearPD 最近正定矩阵
- R lsyMatrix-class 对称密集逻辑矩阵
- R CHMfactor-class 稀疏 Cholesky 分解
- R symmpart-methods 矩阵的对称部分和偏斜(对称)部分
- R sparseMatrix 从非零项构建一般稀疏矩阵
- R dgCMatrix-class 压缩、稀疏、面向列的数值矩阵
- R Cholesky-methods Cholesky 分解方法
- R Subassign-methods “[<-”的方法 - 分配给“矩阵”的子集
- R ldenseMatrix-class 密集逻辑矩阵的虚拟类“ldenseMatrix”
- R norm-methods 矩阵范数
- R ngeMatrix-class 一般密集非零模式矩阵的“ngeMatrix”类
- R CAex 阿尔伯斯的示例矩阵与“困难”特征分解
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Permutation matrices。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。