matmult-methods
位于 Matrix
包(package)。 说明
基本矩阵乘积,%*%
为我们所有的人实施Matrix
也为了sparseVector
类,完全类似于R的基地matrix
和矢量对象。
函数 crossprod
和 tcrossprod
是矩阵乘积或 “cross products”,理想情况下可以有效实现,而无需计算 t(.)
。当易于检测时,它们还会返回 symmetricMatrix
分类矩阵,例如,在 crossprod(m)
中,即单参数情况。
tcrossprod()
采用矩阵转置的cross-product。 tcrossprod(x)
形式上相当于调用 x %*% t(x)
,但比调用 x %*% t(x)
更快,tcrossprod(x, y)
而不是 x %*% t(y)
也是如此。
布尔矩阵乘积通过 %&%
或 boolArith = TRUE
计算。
用法
## S4 method for signature 'CsparseMatrix,diagonalMatrix'
x %*% y
## S4 method for signature 'dgeMatrix,missing'
crossprod(x, y = NULL, boolArith = NA, ...)
## S4 method for signature 'CsparseMatrix,diagonalMatrix'
crossprod(x, y = NULL, boolArith = NA, ...)
## .... and for many more signatures
## S4 method for signature 'CsparseMatrix,ddenseMatrix'
tcrossprod(x, y = NULL, boolArith = NA, ...)
## S4 method for signature 'TsparseMatrix,missing'
tcrossprod(x, y = NULL, boolArith = NA, ...)
## .... and for many more signatures
参数
x |
类似矩阵的对象 |
y |
类似矩阵的对象,或 |
boolArith |
|
... |
可能会有更多的参数传入和传出方法。 |
细节
对于Matrix
包中的一些类,例如dgCMatrix
,直接计算转置的cross-product比先计算转置再计算cross-product要快得多。
boolArith = TRUE
对于常规 (“non cross”) 矩阵乘积,无法指定 %*%
。相反,我们为布尔矩阵乘积提供%&%
运算符。
值
一个 Matrix
对象,在适当的对称矩阵类的一个参数情况下,即继承自 symmetricMatrix
。
方法
- %*%
-
signature(x = "dgeMatrix", y = "dgeMatrix")
:矩阵乘法;其他几个签名组合也是如此,请参阅showMethods("%*%", class = "dgeMatrix")
。 - %*%
-
signature(x = "dtrMatrix", y = "matrix")
和其他签名(使用showMethods("%*%", class="dtrMatrix")
):矩阵乘法。 (匹配)三角矩阵的乘法现在应保持三角形(在类 triangularMatrix 的意义上)。 - 交叉产品
-
signature(x = "dgeMatrix", y = "dgeMatrix")
:其他几个签名也是如此,使用showMethods("crossprod", class = "dgeMatrix")
、矩阵叉积、t(x) %*% y
的高效版本。 - 交叉产品
-
signature(x = "CsparseMatrix", y = "missing")
将t(x) %*% x
作为dsCMatrix
对象返回。 - 交叉产品
-
signature(x = "TsparseMatrix", y = "missing")
将t(x) %*% x
作为dsCMatrix
对象返回。 - 交叉产品,交叉产品
-
signature(x = "dtrMatrix", y = "matrix")
和其他签名,请参见上面的"%*%"
。
注意
Matrix
1.2.0(2015 年 3 月)新引入了boolArith = TRUE
、FALSE
或NA
。其实施尚未经过广泛测试。值得注意的是,带有包含额外零的 x
槽的稀疏矩阵的行为之前尚未记录,请参阅 %&%
帮助页面。
目前,boolArith = TRUE
是通过 CsparseMatrix
强制转换实现的,这对于密集矩阵来说可能非常低效。欢迎为提高效率做出贡献。
例子
## A random sparse "incidence" matrix :
m <- matrix(0, 400, 500)
set.seed(12)
m[runif(314, 0, length(m))] <- 1
mm <- as(m, "CsparseMatrix")
object.size(m) / object.size(mm) # smaller by a factor of > 200
## tcrossprod() is very fast:
system.time(tCmm <- tcrossprod(mm))# 0 (PIII, 933 MHz)
system.time(cm <- crossprod(t(m))) # 0.16
system.time(cm. <- tcrossprod(m)) # 0.02
stopifnot(cm == as(tCmm, "matrix"))
## show sparse sub matrix
tCmm[1:16, 1:30]
也可以看看
tcrossprod
在R的基地,并且crossprod
和%*%
.Matrix
包%&%
对于布尔矩阵乘积方法。
相关用法
- R mat2triplet 将矩阵映射到其三元组表示
- 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 Subassign-methods “[<-”的方法 - 分配给“矩阵”的子集
- R ldenseMatrix-class 密集逻辑矩阵的虚拟类“ldenseMatrix”
- R norm-methods 矩阵范数
- R ngeMatrix-class 一般密集非零模式矩阵的“ngeMatrix”类
- R CAex 阿尔伯斯的示例矩阵与“困难”特征分解
- R diagonalMatrix-class 对角矩阵的“diagonalMatrix”类
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Matrix (Cross) Products (of Transpose)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。