File: SparseMatrix-mult.Rd

package info (click to toggle)
r-bioc-sparsearray 1.6.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,768 kB
  • sloc: ansic: 16,138; makefile: 2
file content (94 lines) | stat: -rw-r--r-- 2,853 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
\name{SparseMatrix-mult}

\alias{SparseMatrix-mult}
\alias{SparseMatrix_mult}

\alias{crossprod}
\alias{crossprod,SparseMatrix,matrix-method}
\alias{crossprod,matrix,SparseMatrix-method}
\alias{crossprod,SparseMatrix,SparseMatrix-method}
\alias{crossprod,SparseMatrix,ANY-method}
\alias{crossprod,ANY,SparseMatrix-method}
\alias{crossprod,SparseMatrix,missing-method}

\alias{tcrossprod}
\alias{tcrossprod,SparseMatrix,matrix-method}
\alias{tcrossprod,matrix,SparseMatrix-method}
\alias{tcrossprod,SparseMatrix,SparseMatrix-method}
\alias{tcrossprod,SparseMatrix,ANY-method}
\alias{tcrossprod,ANY,SparseMatrix-method}
\alias{tcrossprod,SparseMatrix,missing-method}

\alias{\%*\%}
\alias{\%*\%,SparseMatrix,matrix-method}
\alias{\%*\%,matrix,SparseMatrix-method}
\alias{\%*\%,SparseMatrix,SparseMatrix-method}
\alias{\%*\%,SparseMatrix,ANY-method}
\alias{\%*\%,ANY,SparseMatrix-method}

\title{SparseMatrix multiplication and cross-product}

\description{
  Like ordinary matrices in base R, \link{SparseMatrix} derivatives can
  be multiplied with the \code{\%*\%} operator. They also support
  \code{\link[base]{crossprod}()} and \code{\link[base]{tcrossprod}()}.
}

\value{
  The \code{\%*\%}, \code{crossprod()} and \code{tcrossprod()} methods
  for \link{SparseMatrix} objects always return an \emph{ordinary} matrix
  of \code{type()} \code{"double"}.
}

\note{
  Matrix multiplication and cross-product of \link{SparseMatrix}
  derivatives are multithreaded.
  See \code{\link{set_SparseArray_nthread}} for how to control the number
  of threads.
}

\seealso{
  \itemize{
    \item \code{\link[base]{\%*\%}} and \code{\link[base]{crossprod}} in base R.

    \item \link{SparseMatrix} objects.

    \item \code{S4Arrays::\link[S4Arrays]{type}} in the \pkg{S4Arrays}
          package to get the type of the elements of an array-like object.

    \item Ordinary \link[base]{matrix} objects in base R.
  }
}

\examples{
m1 <- matrix(0L, nrow=15, ncol=6)
m1[c(2, 6, 12:17, 22:33, 55, 59:62, 90)] <- 101:126
svt1 <- as(m1, "SVT_SparseMatrix")

set.seed(333)
svt2 <- poissonSparseMatrix(nrow=6, ncol=7, density=0.2)

svt1 \%*\% svt2
m1   \%*\% svt2

## Unary crossprod() and tcrossprod():
crossprod(svt1)               # same as t(svt1) \%*\% svt1
tcrossprod(svt1)              # same as svt1 \%*\% t(svt1)

## Binary crossprod() and tcrossprod():
crossprod(svt1[1:6, ], svt2)  # same as t(svt1[1:6, ]) \%*\% svt2
tcrossprod(svt1, t(svt2))     # same as svt1 \%*\% svt2

## Sanity checks:
m12 <- m1 \%*\% as.matrix(svt2)
stopifnot(
  identical(svt1 \%*\% svt2, m12),
  identical(m1 \%*\% svt2, m12),
  identical(crossprod(svt1), t(svt1) \%*\% svt1),
  identical(tcrossprod(svt1), svt1 \%*\% t(svt1)),
  identical(crossprod(svt1[1:6, ], svt2), t(svt1[1:6, ]) \%*\% svt2),
  identical(tcrossprod(svt1, t(svt2)), m12)
)
}
\keyword{array}
\keyword{methods}