blob: e8f1c91c5837872ae6a6c619055f137741592d64 [file] [log] [blame]
% File src/library/base/man/kronecker.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2011 R Core Team
% Distributed under GPL 2 or later
\name{kronecker}
\alias{kronecker}
\alias{.kronecker} % an internal version.
\alias{\%x\%}
\title{Kronecker Products on Arrays}
\description{
Computes the generalised kronecker product of two arrays,
\code{X} and \code{Y}.
}
\usage{
kronecker(X, Y, FUN = "*", make.dimnames = FALSE, \dots)
X \%x\% Y
}
\arguments{
\item{X}{A vector or array.}
\item{Y}{A vector or array.}
\item{FUN}{a function; it may be a quoted string.}
\item{make.dimnames}{Provide dimnames that are the product of the
dimnames of \code{X} and \code{Y}.}
\item{\dots}{optional arguments to be passed to \code{FUN}.}
}
\details{
If \code{X} and \code{Y} do not have the same number of
dimensions, the smaller array is padded with dimensions of size
one. The returned array comprises submatrices constructed by
taking \code{X} one term at a time and expanding that term as
\code{FUN(x, Y, ...)}.
\code{\%x\%} is an alias for \code{kronecker} (where
\code{FUN} is hardwired to \code{"*"}).
}
\value{
An array \code{A} with dimensions \code{dim(X) * dim(Y)}.
}
\references{
Shayle R. Searle (1982)
\emph{Matrix Algebra Useful for Statistics.} John Wiley and Sons.
}
\author{Jonathan Rougier}
\seealso{
\code{\link{outer}}, on which \code{kronecker} is built
and \code{\link{\%*\%}} for usual matrix multiplication.
}
\examples{
# simple scalar multiplication
( M <- matrix(1:6, ncol = 2) )
kronecker(4, M)
# Block diagonal matrix:
kronecker(diag(1, 3), M)
# ask for dimnames
fred <- matrix(1:12, 3, 4, dimnames = list(LETTERS[1:3], LETTERS[4:7]))
bill <- c("happy" = 100, "sad" = 1000)
kronecker(fred, bill, make.dimnames = TRUE)
bill <- outer(bill, c("cat" = 3, "dog" = 4))
kronecker(fred, bill, make.dimnames = TRUE)
}
\keyword{array}