indMatrix-class
位于 Matrix
包(package)。 说明
indMatrix
类是行和列索引矩阵的类,存储为从 1 开始的整数索引向量。行(列)索引矩阵是以标准单位向量为行(列)的矩阵。当将观测值映射到离散的协变量值集时,此类矩阵非常有用。
将左侧矩阵乘以行索引矩阵相当于对其行进行索引,即对行“with replacement”进行采样。类似地,将右侧矩阵乘以列索引矩阵相当于对其列进行索引。事实上,此类产品在 Matrix
中作为索引操作实现;请参阅下面的“详细信息”。
行和列为标准单位向量的矩阵称为置换矩阵。这种特殊情况由 pMatrix
类指定,它是 indMatrix
的直接子类。
细节
索引矩阵的转置是与 perm
相同但与 margin
相反的索引矩阵。因此,行索引矩阵的转置是列索引矩阵,反之亦然。
行索引矩阵 R
与其本身的叉积是一个对角矩阵,其对角线条目是 R
每列中的条目数。
给定一个带有 perm
槽 p
的行索引矩阵 R
、一个带有 perm
槽 q
的列索引矩阵 C
和一个具有一致尺寸的矩阵 M
,我们有
= | R %*% M | = | M[p, ] |
|
= | M %*% C | = | M[, q] |
|
= | crossprod(C, M) | = | M[q, ] |
|
= | tcrossprod(M, R) | = | M[, p] |
|
= | crossprod(R) | = | Diagonal(x=tabulate(p, ncol(R))) |
|
= | tcrossprod(C) | = | Diagonal(x=tabulate(q, nrow(C)))
|
对索引矩阵进行的操作会相应地返回 indMatrix
。这些包括两个列索引矩阵的乘积和(等效地)列索引矩阵的column-indexing(当未删除维度时)。 indMatrix
上的大多数其他操作将它们视为稀疏非零模式矩阵(即从虚拟类 nsparseMatrix
继承)。因此 indMatrix
的 vector-valued 子集(例如 diag
给出的子集)始终为 "logical"
类型。
类中的对象
可以使用 new("indMatrix", ...)
形式的调用显式创建对象,但更常见的是通过使用 as(., "indMatrix")
形式的调用强制基于 1 的整数索引向量来创建对象;请参阅下面的“方法”。
插槽
margin
-
一个整数,1 或 2,指定矩阵是行 (1) 还是列 (2) 索引。
perm
-
从 1 开始的整数索引向量,即长度为
Dim[margin]
且元素取自1:Dim[1+margin%%2]
的向量。 Dim
、Dimnames
-
从虚拟超类
Matrix
继承。
扩展
直接类 "sparseMatrix"
和 "generalMatrix"
。
方法
%*%
-
signature(x = "indMatrix", y = "Matrix")
和showMethods("%*%", classes = "indMatrix")
列出的其他内容:在适当的情况下作为索引操作实现的矩阵乘积。 coerce
-
signature(from = "numeric", to = "indMatrix")
:支持从正整数向量构建典型的indMatrix
。假定行索引。 coerce
-
signature(from = "list", to = "indMatrix")
:支持行和列索引的indMatrix
构造,包括长度为0的索引向量和最大值小于被索引的行或列数的索引向量。 coerce
-
signature(from = "indMatrix", to = "matrix")
:强制转换为 logical 类型的传统matrix
,并用FALSE
和TRUE
代替 0 和 1。 t
-
signature(x = "indMatrix")
:转置,它是与perm
相同但与margin
相反的indMatrix
。 rowSums
、rowMeans
、colSums
、colMeans
-
signature(x = "indMatrix")
:行和列的总和及平均值。 rbind2
、cbind2
-
signature(x = "indMatrix", y = "indMatrix")
:具有相同列数的两个行索引矩阵的按行串联以及具有相同行数的两个列索引矩阵的按列串联。 - 克罗内克
-
signature(X = "indMatrix", Y = "indMatrix")
:两个行索引矩阵或两个列索引矩阵的克罗内克积,给出与其“interaction”对应的行或列索引矩阵。
例子
p1 <- as(c(2,3,1), "pMatrix")
(sm1 <- as(rep(c(2,3,1), e=3), "indMatrix"))
stopifnot(all(sm1 == p1[rep(1:3, each=3),]))
## row-indexing of a <pMatrix> turns it into an <indMatrix>:
class(p1[rep(1:3, each=3),])
set.seed(12) # so we know '10' is in sample
## random index matrix for 30 observations and 10 unique values:
(s10 <- as(sample(10, 30, replace=TRUE),"indMatrix"))
## Sample rows of a numeric matrix :
(mm <- matrix(1:10, nrow=10, ncol=3))
s10 %*% mm
set.seed(27)
IM1 <- as(sample(1:20, 100, replace=TRUE), "indMatrix")
IM2 <- as(sample(1:18, 100, replace=TRUE), "indMatrix")
(c12 <- crossprod(IM1,IM2))
## same as cross-tabulation of the two index vectors:
stopifnot(all(c12 - unclass(table(IM1@perm, IM2@perm)) == 0))
# 3 observations, 4 implied values, first does not occur in sample:
as(2:4, "indMatrix")
# 3 observations, 5 values, first and last do not occur in sample:
as(list(2:4, 5), "indMatrix")
as(sm1, "nMatrix")
s10[1:7, 1:4] # gives an "ngTMatrix" (most economic!)
s10[1:4, ] # preserves "indMatrix"-class
I1 <- as(c(5:1,6:4,7:3), "indMatrix")
I2 <- as(7:1, "pMatrix")
(I12 <- rbind(I1, I2))
stopifnot(is(I12, "indMatrix"),
identical(I12, rbind(I1, I2)),
colSums(I12) == c(2L,2:4,4:2))
作者
Fabian Scheipl and Uni Muenchen, building on the existing class
pMatrix
after a nice hike's conversation with
Martin Maechler. Methods for crossprod(x, y)
and
kronecker(x, y)
with both arguments inheriting from
indMatrix
were made considerably faster thanks to a suggestion
by Boris Vaillant. Diverse tweaks by Martin Maechler and
Mikael Jagan, notably the latter's implementation of margin
,
prior to which the indMatrix
class was designated only for
row index matrices.
也可以看看
相关用法
- R index-class 虚拟类“index” - 矩阵索引的简单类
- R invertPerm 排列向量的实用程序
- R isSymmetric-methods “Matrix”包中函数“isSymmetric”的方法
- R is.null.DN Dimnames dn 是否类似于 NULL?
- R is.na-methods “矩阵”对象的 is.na()、is.finite() 方法
- R image-methods “Matrix”包中的 image() 方法
- R isTriangular-methods 测试矩阵是三角形还是对角矩阵
- R dtrMatrix-class 三角形稠密数值矩阵
- R facmul-methods 乘以矩阵因式分解的因数
- R solve-methods 函数求解矩阵包中的方法
- R updown-methods 更新和降级稀疏 Cholesky 分解
- R bdiag 构建分块对角矩阵
- R printSpMatrix 灵活格式化和打印稀疏矩阵
- 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-devel大神的英文原创作品 Index Matrices。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。