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


R pMatrix-class 排列矩阵


R语言 pMatrix-class 位于 Matrix 包(package)。

说明

pMatrix 类是置换矩阵类,存储为从 1 开始的整数置换向量。置换矩阵是一个方阵,其行和列都是标准单位向量。由此可见,置换矩阵是索引矩阵的特殊情况(因此 pMatrix 被定义为 indMatrix 的直接子类)。

将左侧矩阵乘以置换矩阵相当于对其行进行置换。类似地,将右侧矩阵乘以置换矩阵相当于置换其列。事实上,此类产品在 Matrix 中作为索引操作实现;请参阅下面的“详细信息”。

细节

根据定义,置换矩阵既是行索引矩阵又是列索引矩阵。但是,pMatrixperm 槽不能互换用作行索引向量和列索引向量。如果 margin=1 ,则 perm 是行索引向量,对应的列索引向量可以计算为 invPerm(perm) ,即通过反转排列。类似地,如果 margin=2 ,则 perminvPerm(perm) 分别是列索引向量和行索引向量。

给定一个 n -by- n 行置换矩阵 Ppermp 和具有一致维度的矩阵 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 的整数索引向量来创建对象;请参阅下面的“方法”。

插槽

marginperm

从超类 indMatrix 继承。这里,perm是长度为Dim[1]的整数向量和1:Dim[1]的排列

.

DimDimnames

从虚拟超类 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, ]

也可以看看

索引矩阵的超类indMatrix,用于许多继承的方法; invPerm ,用于计算逆排列向量。

相关用法


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