當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。