Compute "outer" matrices and matrix-vector products based on a function that operators on pairs of rows. See details.
outer1(X, f)outer2(X, Y, f)
outer1_matvec(X, f, a)
outer2_matvec(X, Y, f, a)
outer1_triplet(X, f, g)
outer2_triplet(X, Y, f, g)
outer1 and outer2 return a matrix. outer1_matvec and outer2_matvec
return a vector. outer1_triplet and outer2_triplet return a list with
a sparse matrix (triplet) representation. See section "Outer" of the
package vignette for details.
A numerical matrix.
Function \(f(x, y)\) that operates on a pair of rows and returns an element for the result.
A numerical matrix.
A scalar vector.
Function \(g(x, y)\) that operates on a pair of rows and returns
a logical value; if TRUE, the corresponding output of f is placed into
the result. Otherwise, the corresponding output of f is omitted from the
result.
Functions \(f(x,y)\) and \(g(x,y)\) operate on pairs of rows. In the
functions with prefix outer1, \(x\) and \(y\) are pairs of rows of
\(X\). In the functions with prefix outer2, \(x\) is a row from
\(X\) and \(y\) is a row from from \(Y\).
The outer1 function computes the \(n \times n\) symmetric matrix
$$ \text{\texttt outer1}(X, f) = \begin{bmatrix} f(x_1, x_1) & \cdots & f(x_1, x_n) \cr \vdots & \ddots & \vdots \cr f(x_n, x_1) & \cdots & f(x_n, x_n) \cr \end{bmatrix} $$
and the outer1_matvec operation computes the \(n\)-dimensional vector
$$ \text{\texttt outer1\_matvec}(X, f, a) = \begin{bmatrix} f(x_1, x_1) & \cdots & f(x_1, x_n) \cr \vdots & \ddots & \vdots \cr f(x_n, x_1) & \cdots & f(x_n, x_n) \cr \end{bmatrix} \begin{bmatrix} a_1 \cr \vdots \cr a_n \cr \end{bmatrix}. $$
The outer2 operation computes the \(m \times n\) matrix
$$ \text{\texttt outer2}(X, Y, f) = \begin{bmatrix} f(x_1, y_1) & \cdots & f(x_1, y_n) \cr \vdots & \ddots & \vdots \cr f(x_m, y_1) & \cdots & f(x_m, y_n) \cr \end{bmatrix} $$
and the outer2_matvec operation computes the \(m\)-dimensional vector
$$ \text{\texttt outer2\_matvec}(X, Y, f, a) = \begin{bmatrix} f(x_1, y_1) & \cdots & f(x_1, y_n) \cr \vdots & \ddots & \vdots \cr f(x_m, y_1) & \cdots & f(x_m, y_n) \cr \end{bmatrix} \begin{bmatrix} a_1 \cr \vdots \cr a_n \cr \end{bmatrix}. $$
The outer_triplet1 and outer_triplet2 operations are analogous to
outer1 and outer2, respectively, except return sparse matrices in
triplet form. The triplet variants take an additional argument g, a
function $g(x_i, y_j)$ that returns TRUE if the result is to be stored
in the result and FALSE otherwise. The argument g can be used for
sparseness.
set.seed(1234)
f = function(x,y) { sum( (x - y)^2 ) }
X = matrix(rnorm(12), 6, 2)
Y = matrix(rnorm(10), 5, 2)
outer1(X, f)
outer2(X, Y, f)
a = rep(1, 6)
b = rep(1, 5)
outer1_matvec(X, f, a)
outer2_matvec(X, Y, f, b)
Run the code above in your browser using DataLab