#' Multi Kronecker Multiplication #' #' \deqn{C = A (B_1\otimes ...\otimes B_r)}{% #' C = A (B_1 %x% ... %x% B_r)} #' #' @examples #' n <- 17 #' p <- c(2, 7, 11) #' q <- c(3, 5, 13) #' #' A <- matrix(rnorm(n * prod(p)), n) #' Bs <- Map(matrix, Map(rnorm, p * q), p) #' #' stopifnot(all.equal( #' A %*% Reduce(`%x%`, Bs), #' mkm(A, Bs) #' )) #' #' @export mkm <- function(A, Bs) { # reshape dim(A) <- c(nrow(A), rev(mapply(nrow, Bs))) # perform equiv Multi Linear Multiplication C <- mlm(A, rev(Bs), seq_along(Bs) + 1, transposed = TRUE) # reshape back dim(C) <- c(nrow(C), prod(dim(C)[-1])) C }