File: boolmatmult-methods.Rd

package info (click to toggle)
rmatrix 1.7-5-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 12,156 kB
  • sloc: ansic: 97,207; makefile: 280; sh: 165
file content (171 lines) | stat: -rw-r--r-- 7,145 bytes parent folder | download | duplicates (3)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
\name{boolmatmult-methods}
\title{Boolean Arithmetic Matrix Products: \code{\%&\%} and Methods}
%
\docType{methods}
\keyword{algebra}
\keyword{array}
\keyword{logic}
\keyword{methods}
%
\alias{\%&\%}
\alias{\%&\%-methods}
\alias{boolmatmult-methods}
%
\alias{\%&\%,ANY,ANY-method}
\alias{\%&\%,ANY,Matrix-method}
\alias{\%&\%,ANY,matrix-method}
\alias{\%&\%,ANY,sparseVector-method}
\alias{\%&\%,ANY,vector-method}
\alias{\%&\%,CsparseMatrix,CsparseMatrix-method}
\alias{\%&\%,CsparseMatrix,RsparseMatrix-method}
\alias{\%&\%,CsparseMatrix,TsparseMatrix-method}
\alias{\%&\%,CsparseMatrix,denseMatrix-method}
\alias{\%&\%,CsparseMatrix,diagonalMatrix-method}
\alias{\%&\%,CsparseMatrix,matrix-method}
\alias{\%&\%,CsparseMatrix,vector-method}
\alias{\%&\%,Matrix,ANY-method}
\alias{\%&\%,Matrix,indMatrix-method}
\alias{\%&\%,Matrix,pMatrix-method}
\alias{\%&\%,Matrix,sparseVector-method}
\alias{\%&\%,RsparseMatrix,CsparseMatrix-method}
\alias{\%&\%,RsparseMatrix,RsparseMatrix-method}
\alias{\%&\%,RsparseMatrix,TsparseMatrix-method}
\alias{\%&\%,RsparseMatrix,denseMatrix-method}
\alias{\%&\%,RsparseMatrix,diagonalMatrix-method}
\alias{\%&\%,RsparseMatrix,matrix-method}
\alias{\%&\%,RsparseMatrix,vector-method}
\alias{\%&\%,TsparseMatrix,CsparseMatrix-method}
\alias{\%&\%,TsparseMatrix,RsparseMatrix-method}
\alias{\%&\%,TsparseMatrix,TsparseMatrix-method}
\alias{\%&\%,TsparseMatrix,denseMatrix-method}
\alias{\%&\%,TsparseMatrix,diagonalMatrix-method}
\alias{\%&\%,TsparseMatrix,matrix-method}
\alias{\%&\%,TsparseMatrix,vector-method}
\alias{\%&\%,denseMatrix,CsparseMatrix-method}
\alias{\%&\%,denseMatrix,RsparseMatrix-method}
\alias{\%&\%,denseMatrix,TsparseMatrix-method}
\alias{\%&\%,denseMatrix,denseMatrix-method}
\alias{\%&\%,denseMatrix,diagonalMatrix-method}
\alias{\%&\%,denseMatrix,matrix-method}
\alias{\%&\%,denseMatrix,vector-method}
\alias{\%&\%,diagonalMatrix,CsparseMatrix-method}
\alias{\%&\%,diagonalMatrix,RsparseMatrix-method}
\alias{\%&\%,diagonalMatrix,TsparseMatrix-method}
\alias{\%&\%,diagonalMatrix,denseMatrix-method}
\alias{\%&\%,diagonalMatrix,diagonalMatrix-method}
\alias{\%&\%,diagonalMatrix,matrix-method}
\alias{\%&\%,diagonalMatrix,vector-method}
\alias{\%&\%,indMatrix,Matrix-method}
\alias{\%&\%,indMatrix,indMatrix-method}
\alias{\%&\%,indMatrix,matrix-method}
\alias{\%&\%,indMatrix,pMatrix-method}
\alias{\%&\%,indMatrix,vector-method}
\alias{\%&\%,matrix,ANY-method}
\alias{\%&\%,matrix,CsparseMatrix-method}
\alias{\%&\%,matrix,RsparseMatrix-method}
\alias{\%&\%,matrix,TsparseMatrix-method}
\alias{\%&\%,matrix,denseMatrix-method}
\alias{\%&\%,matrix,diagonalMatrix-method}
\alias{\%&\%,matrix,indMatrix-method}
\alias{\%&\%,matrix,matrix-method}
\alias{\%&\%,matrix,pMatrix-method}
\alias{\%&\%,matrix,sparseVector-method}
\alias{\%&\%,matrix,vector-method}
\alias{\%&\%,pMatrix,Matrix-method}
\alias{\%&\%,pMatrix,indMatrix-method}
\alias{\%&\%,pMatrix,matrix-method}
\alias{\%&\%,pMatrix,pMatrix-method}
\alias{\%&\%,pMatrix,vector-method}
\alias{\%&\%,sparseVector,ANY-method}
\alias{\%&\%,sparseVector,Matrix-method}
\alias{\%&\%,sparseVector,matrix-method}
\alias{\%&\%,sparseVector,sparseVector-method}
\alias{\%&\%,sparseVector,vector-method}
\alias{\%&\%,vector,ANY-method}
\alias{\%&\%,vector,CsparseMatrix-method}
\alias{\%&\%,vector,RsparseMatrix-method}
\alias{\%&\%,vector,TsparseMatrix-method}
\alias{\%&\%,vector,denseMatrix-method}
\alias{\%&\%,vector,diagonalMatrix-method}
\alias{\%&\%,vector,indMatrix-method}
\alias{\%&\%,vector,matrix-method}
\alias{\%&\%,vector,pMatrix-method}
\alias{\%&\%,vector,sparseVector-method}
\alias{\%&\%,vector,vector-method}
%
\description{
  For boolean or \dQuote{patter\bold{n}} matrices, i.e., \R objects of
  class \code{\linkS4class{nMatrix}}, it is natural to allow matrix
  products using boolean instead of numerical arithmetic.

  In package \pkg{Matrix}, we use the binary operator \code{\%&\%} (aka
  \dQuote{infix}) function) for this and provide methods for all our
  matrices and the traditional \R matrices (see \code{\link{matrix}}).
}
\section{Methods}{
  We provide methods for both the \dQuote{traditional} (\R base) matrices
  and numeric vectors and conceptually all matrices and
  \code{\linkS4class{sparseVector}}s in package \pkg{Matrix}.
  \describe{
    \item{\code{signature(x = "ANY", y = "ANY")}}{ }
    \item{\code{signature(x = "ANY", y = "Matrix")}}{ }
    \item{\code{signature(x = "Matrix", y = "ANY")}}{ }
    \item{\code{signature(x = "nMatrix", y = "nMatrix")}}{ }
    \item{\code{signature(x = "nMatrix", y = "nsparseMatrix")}}{ }
    \item{\code{signature(x = "nsparseMatrix", y = "nMatrix")}}{ }
    \item{\code{signature(x = "nsparseMatrix", y = "nsparseMatrix")}}{ }
    \item{\code{signature(x = "sparseVector", y = "sparseVector")}}{ }
  }% {describe}
}% {Methods}
\note{
  These boolean arithmetic matrix products had been newly
  introduced for \pkg{Matrix} 1.2.0 (March 2015).  Its implementation
  has still not been tested extensively.

  Originally, it was left unspecified how non-structural zeros, i.e., \code{0}'s
  as part of the \code{M@x} slot should be treated for numeric
  (\code{"\linkS4class{dMatrix}"}) and logical (\code{"\linkS4class{lMatrix}"})
  sparse matrices.  We now specify that boolean matrix products should behave as if
  applied to \code{\link{drop0}(M)}, i.e., as if dropping such zeros from
  the matrix before using it.
  \cr
  Equivalently, for all matrices \code{M}, boolean arithmetic should work as if
  applied to \code{M != 0} (or \code{M != FALSE}).

  The current implementation ends up coercing both \code{x} and \code{y} to
  (virtual) class \code{\linkS4class{nsparseMatrix}} which may be quite inefficient
  for dense matrices.  A future implementation may well return a matrix
  with \bold{different} class, but the \dQuote{same} content, i.e., the
  same matrix entries \eqn{m_ij}{m[i,j]}.
}
\seealso{
  \code{\link{\%*\%}}, \code{crossprod()}, or \code{\link{tcrossprod}()},
  for (regular) matrix product methods.
}
\value{
  a pattern matrix, i.e., inheriting from \code{"\linkS4class{nMatrix}"},
  or an \code{"\linkS4class{ldiMatrix}"} in case of a diagonal matrix.
}
\examples{
\dontshow{ % for R_DEFAULT_PACKAGES=NULL
library(stats, pos = "package:base", verbose = FALSE)
}
set.seed(7)
L <- Matrix(rnorm(20) > 1,    4,5)
(N <- as(L, "nMatrix"))
L. <- L; L.[1:2,1] <- TRUE; L.@x[1:2] <- FALSE; L. # has "zeros" to drop0()
D <- Matrix(round(rnorm(30)), 5,6) # -> values in -1:1 (for this seed)
L \%&\% D
stopifnot(identical(L \%&\% D, N \%&\% D),
          all(L \%&\% D == as((L \%*\% abs(D)) > 0, "sparseMatrix")))

## cross products , possibly with  boolArith = TRUE :
crossprod(N)     # -> sparse patter'n' (TRUE/FALSE : boolean arithmetic)
crossprod(N  +0) # -> numeric Matrix (with same "pattern")
stopifnot(all(crossprod(N) == t(N) \%&\% N),
          identical(crossprod(N), crossprod(N +0, boolArith=TRUE)),
          identical(crossprod(L), crossprod(N   , boolArith=FALSE)))
crossprod(D, boolArith =  TRUE) # pattern: "nsCMatrix"
crossprod(L, boolArith =  TRUE) #  ditto
crossprod(L, boolArith = FALSE) # numeric: "dsCMatrix"
}