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


R matmult-methods 矩阵(叉)积(转置)


R语言 matmult-methods 位于 Matrix 包(package)。

说明

基本矩阵乘积,%*%为我们所有的人实施Matrix也为了sparseVector类,完全类似于R的基地matrix和矢量对象。

函数 crossprodtcrossprod 是矩阵乘积或 “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

类似矩阵的对象,或 [t]crossprod() NULL(默认情况下);后一种情况在形式上相当于 y = x

boolArith

logical ,即 NATRUEFALSE 。如果为 true,则结果是(强制)模式矩阵,即 "nMatrix" ,除非存在 NA 条目,并且结果将是 "lMatrix" 。如果为 false,则结果为(强制)数字。当 NA 时(当前默认值),当 xy"nsparseMatrix" 时,结果为模式矩阵,否则为数字。

...

可能会有更多的参数传入和传出方法。

细节

对于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 = TRUEFALSENA。其实施尚未经过广泛测试。值得注意的是,带有包含额外零的 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]

也可以看看

tcrossprodR的基地,并且crossprod%*%.Matrix%&%对于布尔矩阵乘积方法。

相关用法


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