matrix-products {Matrix} | R Documentation |
The basic matrix product, %*%
is implemented for all our
Matrix
and also for
sparseVector
classes, fully analogously to R's
base matrix
and vector objects.
The functions crossprod
and tcrossprod
are
matrix products or “cross products”, ideally implemented
efficiently without computing t(.)
's unnecessarily.
They also return symmetricMatrix
classed
matrices when easily detectable, e.g., in crossprod(m)
, the one
argument case.
tcrossprod()
takes the cross-product of the transpose of a matrix.
tcrossprod(x)
is formally equivalent to, but faster than, the
call x %*% t(x)
, and so is tcrossprod(x, y)
instead of
x %*% t(y)
.
## S4 method for signature 'CsparseMatrix,diagonalMatrix' x %*% y ## .... and many more ## S4 method for signature 'dgeMatrix,missing' crossprod(x, y = NULL) ## .... and many more ## S4 method for signature 'CsparseMatrix,ddenseMatrix' tcrossprod(x, y = NULL) ## .... and many more
x |
a matrix-like object |
y |
a matrix-like object, or for |
For some classes in the Matrix
package, such as
dgCMatrix
, it is much faster to calculate the
cross-product of the transpose directly instead of calculating the
transpose first and then its cross-product.
A Matrix
object, in the one argument case
of an appropriate symmetric matrix class.
signature(x = "dgeMatrix", y = "dgeMatrix")
:
Matrix multiplication; ditto for several other signature
combinations, see showMethods("%*%", class = "dgeMatrix")
.
signature(x = "dtrMatrix", y = "matrix")
and other
signatures (use showMethods("%*%", class="dtrMatrix")
):
matrix multiplication. Multiplication of (matching) triangular
matrices now should remain triangular (in the sense of class
triangularMatrix).
signature(x = "dgeMatrix", y = "dgeMatrix")
:
ditto for several other signatures, use
showMethods("crossprod", class = "dgeMatrix")
, matrix
crossproduct, an efficient version of t(x) %*% y
.
signature(x = "CsparseMatrix", y = "missing")
returns t(x) %*% x
as an dsCMatrix
object.
signature(x = "TsparseMatrix", y = "missing")
returns t(x) %*% x
as an dsCMatrix
object.
signature(x = "dtrMatrix", y =
"matrix")
and other signatures, see "%*%"
above.
tcrossprod
in R's base,
crossprod
and %*%
.
## A random sparse "incidence" matrix : m <- matrix(0, 400, 500) set.seed(12) m[runif(314, 0, length(m))] <- 1 mm <- as(m, "dgCMatrix") 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]