big_prodMat {bigstatsr} | R Documentation |
Product with a matrix
Description
Product between a Filebacked Big Matrix and a matrix.
Usage
big_prodMat(
X,
A.col,
ind.row = rows_along(X),
ind.col = cols_along(X),
ncores = 1,
block.size = block_size(nrow(X), ncores),
center = NULL,
scale = NULL
)
## S4 method for signature 'FBM,matrix'
x %*% y
## S4 method for signature 'matrix,FBM'
x %*% y
Arguments
X |
An object of class FBM. |
A.col |
A matrix with |
ind.row |
An optional vector of the row indices that are used. If not specified, all rows are used. Don't use negative indices. |
ind.col |
An optional vector of the column indices that are used. If not specified, all columns are used. Don't use negative indices. |
ncores |
Number of cores used. Default doesn't use parallelism. You may use nb_cores. |
block.size |
Maximum number of columns read at once. Default uses block_size. |
center |
Vector of same length of |
scale |
Vector of same length of |
x |
A 'double' FBM or a matrix. |
y |
A 'double' FBM or a matrix. |
Value
X \cdot A
.
Matrix parallelization
Large matrix computations are made block-wise and won't be parallelized
in order to not have to reduce the size of these blocks.
Instead, you may use Microsoft R Open
or OpenBLAS in order to accelerate these block matrix computations.
You can also control the number of cores used with
bigparallelr::set_blas_ncores()
.
Examples
X <- big_attachExtdata()
n <- nrow(X)
m <- ncol(X)
A <- matrix(0, m, 10); A[] <- rnorm(length(A))
test <- big_prodMat(X, A)
true <- X[] %*% A
all.equal(test, true)
X2 <- big_copy(X, type = "double")
all.equal(X2 %*% A, true)
# subsetting
ind.row <- sample(n, n/2)
ind.col <- sample(m, m/2)
tryCatch(test2 <- big_prodMat(X, A, ind.row, ind.col),
error = function(e) print(e))
# returns an error. You need to use the subset of A:
test2 <- big_prodMat(X, A[ind.col, ], ind.row, ind.col)
true2 <- X[ind.row, ind.col] %*% A[ind.col, ]
all.equal(test2, true2)