matmult-methods function

Matrix (Cross) Products (of Transpose)

Matrix (Cross) Products (of Transpose)

The basic matrix product, %*% is implemented for all our Matrix and also for sparseVector classes, fully analogously to '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).

Boolean matrix products are computed via either %&% or boolArith = TRUE.

methods

## S4 method for signature 'CsparseMatrix,diagonalMatrix' x %*% y ## S4 method for signature 'CsparseMatrix,diagonalMatrix' crossprod(x, y = NULL, boolArith = NA, ...) ## .... and for many more signatures ## S4 method for signature 'TsparseMatrix,missing' tcrossprod(x, y = NULL, boolArith = NA, ...) ## .... and for many more signatures

Arguments

  • x: a matrix-like object

  • y: a matrix-like object, or for [t]crossprod()

    NULL (by default); the latter case is formally equivalent to y = x.

  • boolArith: logical, i.e., NA, TRUE, or FALSE. If true the result is (coerced to) a pattern matrix, i.e., "nMatrix", unless there are NA entries and the result will be a "lMatrix". If false the result is (coerced to) numeric. When NA, currently the default, the result is a pattern matrix when x and y are "nsparseMatrix" and numeric otherwise.

  • ...: potentially more arguments passed to and from methods.

Details

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.

boolArith = TRUE for regular (non cross ) matrix products, %*% cannot be specified. Instead, we provide the %&% operator for boolean matrix products.

Note

boolArith = TRUE, FALSE or NA has been newly introduced for Matrix 1.2.0 (March 2015). Its implementation has still not been tested extensively. Notably the behaviour for sparse matrices with x slots containing extra zeros had not been documented previously, see the %&% help page.

Currently, boolArith = TRUE is implemented via CsparseMatrix coercions which may be quite inefficient for dense matrices. Contributions for efficiency improvements are welcome.

Returns

A Matrix object, in the one argument case of an appropriate symmetric matrix class, i.e., inheriting from symmetricMatrix.

Methods

  • %*%: 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 ).

  • crossprod: signature(x = "dgeMatrix", y = "dgeMatrix"): ditto for several other signatures, use showMethods("crossprod", class = "dgeMatrix"), matrix crossproduct, an efficient version of t(x) %*% y.

  • crossprod: signature(x = "CsparseMatrix", y = "missing")

     returns `t(x) %*% x` as an `dsCMatrix` object.
    
  • crossprod: signature(x = "TsparseMatrix", y = "missing")

     returns `t(x) %*% x` as an `dsCMatrix` object.
    
  • crossprod,tcrossprod: signature(x = "dtrMatrix", y = "matrix") and other signatures, see "%*%" above.

See Also

tcrossprod in 's base, and crossprod and %*%. Matrix package %&% for boolean matrix product methods.

Examples

## 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]
  • Maintainer: Martin Maechler
  • License: GPL (>= 2) | file LICENCE
  • Last published: 2025-03-11