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