Type: Package
Title: 'BLAS' and 'LAPACK' Routines for Native R Matrices and 'big.matrix' Objects
Version: 3.0.0
Date: 2025-10-05
Depends: bigmemory (≥ 4.0.0)
Imports: methods
Suggests: knitr, rmarkdown, testthat (≥ 3.0.0)
LinkingTo: bigmemory, BH, Rcpp
Author: Frederic Bertrand ORCID iD [cre, aut], Michael J. Kane [aut], Bryan Lewis [aut], John W. Emerson [aut]
Maintainer: Frederic Bertrand <frederic.bertrand@lecnam.net>
Description: Provides arithmetic functions for R matrix and 'big.matrix' objects as well as functions for QR factorization, Cholesky factorization, General eigenvalue, and Singular value decomposition (SVD). A method matrix multiplication and an arithmetic method -for matrix addition, matrix difference- allows for mixed type operation -a matrix class object and a big.matrix class object- and pure type operation for two big.matrix class objects.
License: LGPL-3 | Apache License 2.0
Encoding: UTF-8
Copyright: (C) 2014 Michael J. Kane, Bryan Lewis, and John W. Emerson
LazyLoad: yes
NeedsCompilation: yes
RoxygenNote: 7.3.3
URL: https://fbertran.github.io/bigalgebra/, https://github.com/fbertran/bigalgebra/
BugReports: https://github.com/fbertran/bigalgebra/issues/
VignetteBuilder: knitr
Config/testthat/edition: 3
Packaged: 2025-10-05 14:30:23 UTC; bertran7
Repository: CRAN
Date/Publication: 2025-10-05 15:10:02 UTC

Arithmetic routines for native R matrices and big.matrix objects.

Description

This package provides arithmetic functions for native R matrices and big.matrix objects.

Details

This package provides arithmetic functions for native R matrices and big.matrix objects.

The package defines a number of global options that begin with bigalgebra. They include:

Option Default value
bigalgebra.temp_pattern "matrix_"
bigalgebra.tempdir tempdir
bigalgebra.mixed_arithmetic_returns_R_matrix TRUE
bigalgebra.DEBUG FALSE

The bigalgebra.tempdir option must be a function that returns a temporary directory path used to big matrix results of BLAS and LAPACK operations. The deault value is simply the default R tempdir function.

The bigalgebra.temp_pattern is a name prefix for file names of generated big matrix objects output as a result of BLAS and LAPACK operations.

The bigalgebra.mixed_arithmetic_returns_R_matrix option determines whether arithmetic operations involving an R matrix or vector and a big.matrix matrix or vector return a big matrix (when the option is FALSE), or return a normal R matrix (TRUE).

The package is built, by default, with R's native BLAS libraries, which use 32-bit signed integer indexing. The default build is limited to vectors of at most 2**31 - 1 entries and matrices with at most 2**31 - 1 rows and 2**31 - 1 columns (note that standard R matrices are limtied to 2**31 - 1 total entries).

The package includes a reference BLAS implementation that supports 64-bit integer indexing, relaxing the limitation on vector lengths and matrix row and column limits. Installation of this package with the 64-bit reference BLAS implementation may be performed from the command-line install:

REFBLAS=1 R CMD INSTALL bigalgebra

where "bigalgebra" is the source package (for example, bigalgebra_0.8.4.tar.gz).

The package may also be build with user-supplied external BLAS and LAPACK libraries, in either 32- or 64-bit varieties. This is an advanced topic that requires additional Makevars modification, and may include adjustment of the low-level calling syntax depending on the library used.

Feel free to contact us for help installing and running the package.

Author(s)

Frédéric Bertrand, Michael J. Kane, Bryan Lewis, John W. Emerson

Maintainer: Frédéric Bertrand <frederic.bertrand@lecnam.net>

References

https://www.netlib.org/blas/

https://www.netlib.org/lapack/

See Also

bigmemory, big.matrix

Examples


# Testing the development of the user-friendly operators:
# if you have any problems, please email us!  - Jay & Mike 4/29/2010

library("bigmemory")
A <- big.matrix(5,4, type="double", init=0,
                dimnames=list(NULL, c("alpha", "beta")))
B <- big.matrix(4,4, type="double", init=0,
                dimnames=list(NULL, c("alpha", "beta")))

C <- A 
D <- A[] 

print(C - D)       # Compare the results (subtraction of an R matrix from a
                   # big.matrix)

# The next example illustrates mixing R and big.matrix objects. It returns by
# default (see # options("bigalgebra.mixed_arithmetic_returns_R_matrix")
D <- matrix(rnorm(16),4)
E <- A 

Class "big.matrix" arithmetic methods

Description

Arithmetic operations for big.matrices

Methods

%*%

signature{x="big.matrix", y="big.matrix"}: ...

%*%

signature{x="matrix", y="big.matrix"}: ...

%*%

signature{x="big.matrix", y="matrix"}: ...

Arith

signature{x="big.matrix", y="big.matrix"}: ...

Arith

signature{x="big.matrix", y="matrix"}: ...

Arith

signature{x="matrix", y="big.matrix"}: ...

Arith

signature{x="big.matrix", y="numeric"}: ...

Arith

signature{x="numeric", y="big.matrix"}: ...

Notes

Miscellaneous arithmetic methods for matrices and big.matrices. See also options("bigalgebra.mixed_arithmetic_returns_R_matrix").

Author(s)

B. W. Lewis <blewis@illposed.net>


Add two double-precision vectors.

Description

Compute double precision DY := DX + DY for N elements, applying the specified storage increments. This routine mirrors the BLAS DAXPY operation with a unit scaling factor.

Usage

dadd(N = NULL, X, INCX = 1L, Y, INCY = 1L)

Arguments

N

number of elements in the input vectors. Defaults to the length of X if NULL.

X

double precision vector or matrix providing the addend.

INCX

storage spacing between elements of X.

Y

double precision vector or matrix that is updated in place.

INCY

storage spacing between elements of Y.

Details

The implementation delegates to the BLAS DAXPY routine with a unit scaling factor, making it equivalent to daxpy(1.0, X, Y) while exposing an interface consistent with other low-level wrappers such as dcopy and dscal.

Value

The modified object Y containing the element-wise sums.

Examples

set.seed(4669)
X <- matrix(runif(6), 3, 2)
Y <- matrix(runif(6), 3, 2)
dadd(X = X, Y = Y)
all.equal(Y, X + Y)


Sum of absolute values

Description

Sum of absolute values

Usage

dasum(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Numeric scalar.


BLAS daxpy functionality

Description

This function implements the function Y := A * X + Y where X and Y may be either native double-precision valued R matrices or numeric vectors, or double-precision valued big.matrix objects, and A is a scalar.

Usage

daxpy(A = 1, X, Y)

Arguments

A

Optional numeric scalar value to scale the matrix X by, with a default value of 1.

X

Requried to be either a native R matrix or numeric vector, or a big.matrix object

Y

Optional native R matrix or numeric vector, or a big.matrix object

Details

At least one of either X or Y must be a big.matrix. All values must be of type double (the only type presently supported by the bigalgebra package).

This function is rarely necessary to use directly since the bigalgebra package defines standard arithmetic operations and scalar multiplication. It is more efficient to use daxpy directly when both scaling and matrix addition are required, in which case both operations are performed in one step.

Value

The output value depends on the classes of input values X and Y and on the value of the global option bigalgebra.mixed_arithmetic_returns_R_matrix.

If X and Y are both big matrices, or Y is missing, options("bigalgebra.mixed_arithmetic_returns_R_matrix") is FALSE, then a big.matrix is returned. The returned big.matrix is backed by a temporary file mapping that will be deleted when the returned result is garbage collected by R (see the examples).

Otherwise, a standard R matrix is returned. The dimensional shape of the output is taken from X. If input X is dimensionless (that is, lacks a dimension attribute), then the output is a column vector.

Author(s)

Michael J. Kane

References

https://www.netlib.org/blas/daxpy.f

See Also

bigmemory

Examples

require(bigmemory)
A = matrix(1, nrow=3, ncol=2)
B <- big.matrix(3, 2, type="double", init=0,
                dimnames=list(NULL, c("alpha", "beta")), shared=FALSE)
C = B + B   # C is a new big matrix
D = A + B   # D defaults to a regular R matrix, to change this, set the option:
# options(bigalgebra.mixed_arithmetic_returns_R_matrix=FALSE)
E = daxpy(A=1.0, X=B, Y=B)  # Same kind of result as C
print(C[])
print(D)
print(E[])

# The C and E big.matrix file backings will be deleted when garbage collected:
# (We enable debugging to see this explicitly)
options(bigalgebra.DEBUG=TRUE)
rm(C,E)
gc()


Copy a vector.

Description

Copy double precision DX to double precision DY. For I = 0 to N-1, copy DX(LX+I*INCX) to DY(LY+I*INCY), where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is defined in a similar way using INCY.

Usage

dcopy(N = NULL, X, INCX = 1, Y, INCY = 1)

Arguments

N

number of elements in input vector(s)

X

double precision vector with N elements

INCX

storage spacing between elements of DX

Y

double precision vector with N elements

INCY

storage spacing between elements of DY

Value

DY copy of vector DX (unchanged if N .LE. 0)

References

C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. Krogh, Basic linear algebra subprograms for Fortran usage, Algorithm No. 539, Transactions on Mathematical Software 5, 3 (September 1979), pp. 308-323.

Examples

set.seed(4669)
A = big.matrix(3, 2, type="double", init=1, dimnames=list(NULL, 
c("alpha", "beta")), shared=FALSE)
B = big.matrix(3, 2, type="double", init=0, dimnames=list(NULL, 
c("alpha", "beta")), shared=FALSE)

dcopy(X=A,Y=B)
A[,]-B[,]

# The big.matrix file backings will be deleted when garbage collected.
rm(A,B)
gc()


Dot product of two vectors

Description

Dot product of two vectors

Usage

ddot(N = NULL, X, INCX = 1L, Y, INCY = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Y

Double-precision object updated in place.

INCY

Integer stride for traversing 'Y'.

Value

Numeric scalar containing the dot product.

Examples

ddot(X = 1:3, Y = c(2, 4, 6))


DGEEV computes eigenvalues and eigenvectors.

Description

DGEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices.

DGEEV computes for an N-by-N real nonsymmetric matrix A, the eigenvalues and, optionally, the left and/or right eigenvectors. The right eigenvector v(j) of A satisfies A * v(j) = lambda(j) * v(j) where lambda(j) is its eigenvalue. The left eigenvector u(j) of A satisfies u(j)**H * A = lambda(j) * u(j)**H where u(j)**H denotes the conjugate-transpose of u(j).

The computed eigenvectors are normalized to have Euclidean norm equal to 1 and largest component real.

Usage

dgeev(
  JOBVL = NULL,
  JOBVR = NULL,
  N = NULL,
  A,
  LDA = NULL,
  WR,
  WI,
  VL = NULL,
  LDVL = NULL,
  VR = NULL,
  LDVR = NULL,
  WORK = NULL,
  LWORK = NULL
)

Arguments

JOBVL

a character.

= 'N':

left eigenvectors of A are not computed;

= 'V':

left eigenvectors of A are computed.

JOBVR

a character.

= 'N':

right eigenvectors of A are not computed;

= 'V':

right eigenvectors of A are computed.

N

an integer. The order of the matrix A. N >= 0.

A

a matrix of dimension (LDA,N), the N-by-N matrix A.

LDA

an integer. The leading dimension of the matrix A. LDA >= max(1,N).

WR

a vector of dimension (N). WR contain the real part of the computed eigenvalues. Complex conjugate pairs of eigenvalues appear consecutively with the eigenvalue having the positive imaginary part first.

WI

a vector of dimension (N). WI contain the imaginary part of the computed eigenvalues. Complex conjugate pairs of eigenvalues appear consecutively with the eigenvalue having the positive imaginary part first.

VL

a matrx of dimension (LDVL,N)

If

JOBVL = 'V', the left eigenvectors u(j) are stored one after another in the columns of VL, in the same order as their eigenvalues.

If

JOBVL = 'N', VL is not referenced.

If

the j-th eigenvalue is real, then u(j) = VL(:,j), the j-th column of VL.

If

the j-th and (j+1)-st eigenvalues form a complex conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and u(j+1) = VL(:,j) - i*VL(:,j+1).

LDVL

an integer. The leading dimension of the array VL. LDVL >= 1; if JOBVL = 'V', LDVL >= N.

VR

a matrix of dimension (LDVR,N).

If

JOBVR = 'V', the right eigenvectors v(j) are stored one after another in the columns of VR, in the same order as their eigenvalues.

If

JOBVR = 'N', VR is not referenced.

If

the j-th eigenvalue is real, then v(j) = VR(:,j), the j-th column of VR.

If

the j-th and (j+1)-st eigenvalues form a complex conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and v(j+1) = VR(:,j) - i*VR(:,j+1).

LDVR

an integer. The leading dimension of the array VR. LDVR >= 1; if JOBVR = 'V', LDVR >= N.

WORK

a matrix of dimension (MAX(1,LWORK))

LWORK

an integer. The dimension of the array WORK.LWORK >= max(1,3*N), and if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*N. For good performance, LWORK must generally be larger. If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.

Value

WR, WI, VR, VL and Work. On exit, A has been overwritten.

Examples

set.seed(4669)
A = matrix(rnorm(16),4)
WR= matrix(0,nrow=4,ncol=1)
WI= matrix(0,nrow=4,ncol=1)
VL = matrix(0,ncol=4,nrow=4)
eigen(A)
dgeev(A=A,WR=WR,WI=WI,VL=VL)
VL
WR
WI

rm(A,WR,WI,VL)

A = as.big.matrix(matrix(rnorm(16),4))
WR= matrix(0,nrow=4,ncol=1)
WI= matrix(0,nrow=4,ncol=1)
VL = as.big.matrix(matrix(0,ncol=4,nrow=4))
eigen(A[,])
dgeev(A=A,WR=WR,WI=WI,VL=VL)
VL[,]
WR[,]
WI[,]

rm(A,WR,WI,VL)
gc()


Matrix Multiply

Description

This is function provides dgemm functionality, which DGEMM performs one of the matrix-matrix operations. C := ALPHA * op(A) * op(B) + BETA * C.

Usage

dgemm(
  TRANSA = "N",
  TRANSB = "N",
  M = NULL,
  N = NULL,
  K = NULL,
  ALPHA = 1,
  A,
  LDA = NULL,
  B,
  LDB = NULL,
  BETA = 0,
  C,
  LDC = NULL,
  COFF = 0
)

Arguments

TRANSA

a character. TRANSA specifies the form of op( A ) to be used in the matrix multiplication as follows:

TRANSA =

'N' or 'n', op( A ) = A.

TRANSA =

'T' or 't', op( A ) = A**T.

TRANSA =

'C' or 'c', op( A ) = A**T.

TRANSB

a character. TRANSB specifies the form of op( B ) to be used in the matrix multiplication as follows: #'

TRANSA =

'N' or 'n', op( B ) = B.

TRANSA =

'T' or 't', op( B ) = B**T.

TRANSA =

'C' or 'c', op( B ) = B**T.

M

an integer. M specifies the number of rows of the matrix op( A ) and of the matrix C. M must be at least zero.

N

an integer. N specifies the number of columns of the matrix op( B ) and of the matrix C. N must be at least zero.

K

an integer. K specifies the number of columns of the matrix op( A ) and the number of rows of the matrix op( B ). K must be at least zero.

ALPHA

a real number. Specifies the scalar alpha.

A

a matrix of dimension (LDA, ka), where ka is k when TRANSA = 'N' or 'n', and is m otherwise. Before entry with TRANSA = 'N' or 'n', the leading m by k part of the array A must contain the matrix A, otherwise the leading k by m part of the array A must contain the matrix A.

LDA

an integer.

B

a matrix of dimension ( LDB, kb ), where kb is n when TRANSB = 'N' or 'n', and is k otherwise. Before entry with TRANSB = 'N' or 'n', the leading k by n part of the array B must contain the matrix B, otherwise the leading n by k part of the array B must contain the matrix B.

LDB

an integer.

BETA

a real number. Specifies the scalar beta

C

a matrix of dimension ( LDC, N ). Before entry, the leading m by n part of the array C must contain the matrix C, except when beta is zero, in which case C need not be set on entry. On exit, the array C is overwritten by the m by n matrix ( alpha*op( A )*op( B ) + beta*C ).

LDC

an integer.

COFF

offset for C.

Value

Update C with the result.

Examples

require(bigmemory)
A = as.big.matrix(matrix(1, nrow=3, ncol=2))
B <- big.matrix(2, 3, type="double", init=-1,
                dimnames=list(NULL, c("alpha", "beta")), shared=FALSE)
C = big.matrix(3, 3, type="double", init=1,
               dimnames=list(NULL, c("alpha", "beta", "gamma")), shared=FALSE)  
2*A[,]%*%B[,]+0.5*C[,]
E = dgemm(ALPHA=2.0, A=A, B=B, BETA=0.5, C=C)
E[,] # Same result

# The big.matrix file backings will be deleted when garbage collected.
rm(A,B,C,E)
gc()

QR factorization

Description

DGEQRF computes a QR factorization of a real M-by-N matrix A: A = Q * R.

Usage

dgeqrf(
  M = NULL,
  N = NULL,
  A,
  LDA = NULL,
  TAU = NULL,
  WORK = NULL,
  LWORK = NULL
)

Arguments

M

an integer. The number of rows of the matrix A. M >= 0.

N

an integer. The number of columns of the matrix A. N >= 0.

A

the M-by-N big matrix A.

LDA

an integer. The leading dimension of the array A. LDA >= max(1,M).

TAU

a min(M,N) matrix. The scalar factors of the elementary reflectors.

WORK

a (MAX(1,LWORK)) matrix. On exit, if INFO = 0, WORK(1) returns the optimal LWORK.

LWORK

an integer. The dimension of th array WORK.

Value

M-by-N big matrix A. The elements on and above the diagonal of the array contain the min(M,N)-by-N upper trapezoidal matrix R (R is upper triangular if m >= n); the elements below the diagonal, with the array TAU, represent the orthogonal matrix Q as a product of min(m,n) elementary reflectors.

Examples

hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
h9 <- hilbert(9); h9
qr(h9)$rank           #--> only 7
qrh9 <- qr(h9, tol = 1e-10)
qrh9$rank 
C <- as.big.matrix(h9)
dgeqrf(A=C)

# The big.matrix file backings will be deleted when garbage collected.
rm(C)
gc()


DGESDD computes the singular value decomposition (SVD) of a real matrix.

Description

DGESDD computes the singular value decomposition (SVD) of a real M-by-N matrix A, optionally computing the left and right singular vectors. If singular vectors are desired, it uses a divide-and-conquer algorithm.

The SVD is written

A = U * SIGMA * transpose(V)

where SIGMA is an M-by-N matrix which is zero except for its min(m,n) diagonal elements, U is an M-by-M orthogonal matrix, and V is an N-by-N orthogonal matrix. The diagonal elements of SIGMA are the singular values of A; they are real and non-negative, and are returned in descending order. The first min(m,n) columns of U and V are the left and right singular vectors of A.

Note that the routine returns VT = V**T, not V.

Usage

dgesdd(
  JOBZ = "A",
  M = NULL,
  N = NULL,
  A,
  LDA = NULL,
  S,
  U,
  LDU = NULL,
  VT,
  LDVT = NULL,
  WORK = NULL,
  LWORK = NULL
)

Arguments

JOBZ

a character. Specifies options for computing all or part of the matrix U:

= 'A':

all M columns of U and all N rows of V**T are returned in the arrays U and VT;

= 'S':

the first min(M,N) columns of U and the first min(M,N) rows of V**T are returned in the arrays U and VT;

= 'O':

If M >= N, the first N columns of U are overwritten on the array A and all rows of V**T are returned in the array VT; otherwise, all columns of U are returned in the array U and the first M rows of V**T are overwritten in the array A;

= 'N':

no columns of U or rows of V**T are computed.

M

an integer. The number of rows of the input matrix A. M >= 0.

N

an integer. The number of columns of the input matrix A. N >= 0.

A

the M-by-N matrix A.

LDA

an integer. The leading dimension of the matrix A. LDA >= max(1,M).

S

a matrix of dimension (min(M,N)). The singular values of A, sorted so that S(i) >= S(i+1).

U

U is a matrx of dimension (LDU,UCOL)

UCOL = M if

JOBZ = 'A' or JOBZ = 'O' and M < N; UCOL = min(M,N) if JOBZ = 'S'.

If

JOBZ = 'A' or JOBZ = 'O' and M < N, U contains the M-by-M orthogonal matrix U;

if

JOBZ = 'S', U contains the first min(M,N) columns of U (the left singular vectors, stored columnwise);

if

JOBZ = 'O' and M >= N, or JOBZ = 'N', U is not referenced.

LDU

an integer. The leading dimension of the matrix U. LDU >= 1; if JOBZ = 'S' or 'A' or JOBZ = 'O' and M < N, LDU >= M.

VT

VT is matrix of dimension (LDVT,N)

If

JOBZ = 'A' or JOBZ = 'O' and M >= N, VT contains the N-by-N orthogonal matrix V**T;

if

JOBZ = 'S', VT contains the first min(M,N) rows of V**T (the right singular vectors, stored rowwise);

if

JOBZ = 'O' and M < N, or JOBZ = 'N', VT is not referenced.

LDVT

an integer. The leading dimension of the matrix VT. LDVT >= 1; if JOBZ = 'A' or JOBZ = 'O' and M >= N, LDVT >= N; if JOBZ = 'S', LDVT >= min(M,N).

WORK

a matrix of dimension (MAX(1,LWORK))

LWORK

an integer. The dimension of the array WORK. LWORK >= 1. If LWORK = -1, a workspace query is assumed. The optimal size for the WORK array is calculated and stored in WORK(1), and no other work except argument checking is performed.

Let mx = max(M,N) and mn = min(M,N).

If

JOBZ = 'N', LWORK >= 3*mn + max( mx, 7*mn ).

If

JOBZ = 'O', LWORK >= 3*mn + max( mx, 5*mn*mn + 4*mn ).

If

JOBZ = 'S', LWORK >= 4*mn*mn + 7*mn.

If

JOBZ = 'A', LWORK >= 4*mn*mn + 6*mn + mx.

These are not tight minimums in all cases; see comments inside code. For good performance, LWORK should generally be larger; a query is recommended.

Value

IWORK an integer matrix dimension of (8*min(M,N)) A is updated.

if

JOBZ = 'O', A is overwritten with the first N columns of U (the left singular vectors, stored columnwise) if M >= N; A is overwritten with the first M rows of V**T (the right singular vectors, stored rowwise) otherwise.

if

JOBZ .ne. 'O', the contents of A are destroyed.

INFO an integer

= 0:

successful exit.

< 0:

if INFO = -i, the i-th argument had an illegal value.

> 0:

DBDSDC did not converge, updating process failed.

Examples

set.seed(4669)
A = matrix(rnorm(12),4,3)
S = matrix(0,nrow=3,ncol=1)
U = matrix(0,nrow=4,ncol=4)
VT = matrix(0,ncol=3,nrow=3)
dgesdd(A=A,S=S,U=U,VT=VT)
S
U
VT

rm(A,S,U,VT)

A = as.big.matrix(matrix(rnorm(12),4,3))
S = as.big.matrix(matrix(0,nrow=3,ncol=1))
U = as.big.matrix(matrix(0,nrow=4,ncol=4))
VT = as.big.matrix(matrix(0,ncol=3,nrow=3))
dgesdd(A=A,S=S,U=U,VT=VT)
S[,]
U[,]
VT[,]

rm(A,S,U,VT)
gc()


Element-wise (Hadamard) product

Description

Computes Z := X \circ Y. When 'Z' is missing it is allocated automatically.

Usage

dhprod(N = NULL, X, INCX = 1L, Y, INCY = 1L, Z, INCZ = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Y

Double-precision object updated in place.

INCY

Integer stride for traversing 'Y'.

Z

Optional output container receiving the product.

INCZ

Integer stride for 'Z'.

Value

The updated object 'Z'.

Examples

dhprod(X = 1:4, Y = rep(2, 4))


Euclidean norm (2-norm)

Description

Euclidean norm (2-norm)

Usage

dnrm2(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Numeric scalar containing the Euclidean norm.


Cholesky factorization

Description

DPOTRF computes the Cholesky factorization of a real symmetric positive definite matrix A.

The factorization has the form

A =

U**T * U, if UPLO = 'U', or

A =

L * L**T, if UPLO = 'L',

where U is an upper triangular matrix and L is lower triangular.

This is the block version of the algorithm, calling Level 3 BLAS.

Usage

dpotrf(UPLO = "U", N = NULL, A, LDA = NULL)

Arguments

UPLO

a character.

'U':

Upper triangle of A is stored;

'L':

Lower triangle of A is stored.

N

an integer. The order of the matrix A. N >= 0.

A

a big.matrix, dimension (LDA,N).

LDA

an integer. Dimension of the array A. LDA >= max(1,N).

Value

updates the big matrix A with the result, INFO is an integer

= 0:

successful exit

< 0:

if INFO = -i, the i-th argument had an illegal value

> 0:

if INFO = i, the leading minor of order i is not positive definite, and the factorization could not be completed.

Terms laying out of the computed triangle should be discarded.

Examples

set.seed(4669)
A = matrix(rnorm(16),4)
B = as.big.matrix(A %*% t(A))
C = A %*% t(A)
chol(C)
dpotrf(UPLO='U', N=4, A=B, LDA=4)
D <- B[,]
D[lower.tri(D)]<-0
D
D-chol(C)
t(D)%*%D-C

#' # The big.matrix file backings will be deleted when garbage collected.
rm(A,B,C,D)
gc()

Product of vector elements

Description

Product of vector elements

Usage

dprdct(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Numeric scalar equal to the product of elements of 'X'.


High-accuracy dot product

Description

Forms the dot product using long-double accumulation to mitigate rounding error.

Usage

dqddot(N = NULL, X, INCX = 1L, Y, INCY = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Y

Double-precision object updated in place.

INCY

Integer stride for traversing 'Y'.

Value

Numeric scalar equal to the dot product of 'X' and 'Y'.

Examples

dqddot(X = 1:3, Y = c(2, 4, 6))


Scales a vector by a constant.

Description

Scales a vector by a constant.

Usage

dscal(N = NULL, ALPHA, Y, INCY = 1L)

Arguments

N

an integer. Number of elements in input vector(s)

ALPHA

a real number. The scalar alpha

Y

a big matrix to scale by ALPHA

INCY

an integer. Storage spacing between elements of Y.

Value

Update Y.

Examples

set.seed(4669)
A = big.matrix(3, 2, type="double", init=1, dimnames=list(NULL, 
c("alpha", "beta")), shared=FALSE)
dscal(ALPHA=2,Y=A)
A[,]

# The big.matrix file backings will be deleted when garbage collected.
rm(A)
gc()


Fill a vector or matrix with a constant value

Description

Fill a vector or matrix with a constant value

Usage

dset(N = NULL, ALPHA, X, INCX = 1L)

Arguments

N

Optional integer specifying the number of elements to modify. Defaults to the length of 'X'.

ALPHA

Numeric scalar used to populate 'X'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] to be filled in place.

INCX

Integer stride between successive elements of 'X'.

Value

Invisibly returns 'X' after modification.

Examples

x <- matrix(0, 2, 3)
dset(ALPHA = 5, X = x)
x


Element-wise square root

Description

Applies the square root to each entry of 'X' in place, supporting both base R and ['bigmemory::big.matrix'] inputs.

Usage

dsqrt(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Invisibly returns the modified object 'X'.

Examples

vals <- matrix(c(1, 4, 9, 16), 2)
dsqrt(X = vals)
vals


In-place vector subtraction

Description

Updates 'Y' by subtracting 'X', i.e. Y := Y - X.

Usage

dsub(N = NULL, X, INCX = 1L, Y, INCY = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Y

Double-precision object updated in place.

INCY

Integer stride for traversing 'Y'.

Value

Invisibly returns the modified 'Y'.

Examples

x <- 1:4
y <- rep(10, 4)
dsub(X = x, Y = y)
y


Sum of elements

Description

Sum of elements

Usage

dsum(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Numeric scalar giving the sum of elements of 'X'.


Swap two double-precision vectors.

Description

Exchange the elements of two double precision vectors in place. For I = 0 to N-1, swap DX(LX + I * INCX) with DY(LY + I * INCY) where LX and LY depend on the increment signs. When an optimized BLAS is available the implementation dispatches to DSWAP; otherwise a portable C loop performs the exchange.

Usage

dswap(N = NULL, X, INCX = 1L, Y, INCY = 1L)

Arguments

N

Number of elements in the input vectors. Defaults to the full length of X if NULL.

X

Double precision vector or matrix providing the first data block.

INCX

Storage spacing between elements of X.

Y

Double precision vector or matrix providing the second data block.

INCY

Storage spacing between elements of Y.

Details

When an optimized BLAS is available the implementation delegates to the Fortran DSWAP routine. Otherwise a portable C fallback performs the exchange directly while respecting the supplied vector increments.

Value

Invisibly returns NULL; both X and Y are modified in place.

See Also

[dcopy()], [daxpy()] and [dscal()].

Examples

set.seed(4670)
X <- matrix(runif(6), 3, 2)
Y <- matrix(runif(6), 3, 2)
X_original <- X
Y_original <- Y
dswap(X = X, Y = Y)
all.equal(X, Y_original)
all.equal(Y, X_original)

Symmetric matrix-matrix multiplication

Description

Computes C := \alpha \operatorname{op}(A) B + \beta C when 'A' is symmetric.

Usage

dsymm(
  SIDE = "L",
  UPLO = "U",
  M = NULL,
  N = NULL,
  ALPHA = 1,
  A,
  LDA = NULL,
  B,
  LDB = NULL,
  BETA = 0,
  C,
  LDC = NULL
)

Arguments

SIDE

Character specifying whether 'A' multiplies from the left ('"L"') or right ('"R"').

UPLO

Character indicating whether 'A' stores the upper ('"U"') or lower ('"L"') triangle.

M, N

Optional integers for the output dimensions.

ALPHA, BETA

Numeric scalars.

A

Symmetric matrix or big.matrix.

LDA, LDB, LDC

Leading dimensions.

B

Input matrix.

C

Optional output container updated in place.

Value

Invisibly returns 'C'.

Examples

A <- matrix(c(2, 1, 1, 3), 2, 2)
B <- diag(2)
C <- matrix(0, 2, 2)
dsymm(A = A, B = B, C = C)
C


Generalised AXPBY operation

Description

Computes the linear combination Y := \alpha X + \beta Y in place.

Usage

dvcal(N = NULL, ALPHA = 1, X, INCX = 1L, BETA = 1, Y, INCY = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

ALPHA

Numeric scalar multiplying 'X'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

BETA

Numeric scalar multiplying 'Y'.

Y

Double-precision object updated in place.

INCY

Integer stride for traversing 'Y'.

Value

Invisibly returns the modified 'Y'.

Examples

x <- 1:5
y <- rep(2, 5)
dvcal(ALPHA = 2, X = x, BETA = -1, Y = y)
y


Three-dimensional cross product

Description

Three-dimensional cross product

Usage

dxyz(X, Y, Z)

Arguments

X

Numeric vector of length three, matrix with three rows, or big.matrix.

Y

Numeric object matching the shape of 'X'.

Z

Optional output container.

Value

The updated object 'Z' containing the cross product.

Examples

dxyz(X = c(1, 0, 0), Y = c(0, 1, 0))


Index of the maximum absolute value

Description

Index of the maximum absolute value

Usage

idamax(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Integer index (1-based).


Index of the minimum absolute value

Description

Index of the minimum absolute value

Usage

idamin(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Integer index (1-based).


Index of the maximum element

Description

Index of the maximum element

Usage

idmax(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Integer index (1-based).


Index of the minimum element

Description

Index of the minimum element

Usage

idmin(N = NULL, X, INCX = 1L)

Arguments

N

Optional integer giving the number of elements. Defaults to 'length(X)'.

X

Double-precision vector, matrix or ['bigmemory::big.matrix'] input.

INCX

Integer stride for traversing 'X'.

Value

Integer index (1-based) of the smallest entry in 'X'.