org.ejml.ops
Class CommonOps

java.lang.Object
  extended by org.ejml.ops.CommonOps

public class CommonOps
extends Object

Common matrix operations are contained here. Which specific underlying algorithm is used is not specified just the out come of the operation. Nor should calls to these functions reply on the underlying implementation. Which algorithm is used can depend on the matrix being passed in.

For more exotic and specialized generic operations see SpecializedOps.

Author:
Peter Abeles
See Also:
MatrixMatrixMult, MatrixVectorMult, SpecializedOps, MatrixFeatures

Constructor Summary
CommonOps()
           
 
Method Summary
static void add(D1Matrix64F a, D1Matrix64F b, D1Matrix64F c)
          Performs the following operation:

c = a + b
cij = aij + bij
static void add(D1Matrix64F a, double val)
          Performs an in-place scalar addition:

a = a + val
aij = aij + val
static void add(D1Matrix64F a, double val, D1Matrix64F c)
          Performs scalar addition:

c = a + val
cij = aij + val
static void add(D1Matrix64F a, double beta, D1Matrix64F b, D1Matrix64F c)
          Performs the following operation:

c = a + β * b
cij = aij + β * bij
static void add(double alpha, D1Matrix64F a, D1Matrix64F b, D1Matrix64F c)
          Performs the following operation:

c = α * a + b
cij = α * aij + bij
static void add(double alpha, D1Matrix64F a, double beta, D1Matrix64F b, D1Matrix64F c)
          Performs the following operation:

c = α * a + β * b
cij = α * aij + β * bij
static void addEquals(D1Matrix64F a, D1Matrix64F b)
          Performs the following operation:

a = a + b
aij = aij + bij
static void addEquals(D1Matrix64F a, double beta, D1Matrix64F b)
          Performs the following operation:

a = a + β * b
aij = aij + β * bij
static void changeSign(D1Matrix64F a)
           Changes the sign of every element in the matrix.

aij = -aij
static DenseMatrix64F[] columnsToVector(DenseMatrix64F A, DenseMatrix64F[] v)
          Converts the columns in a matrix into a set of vectors.
static double det(DenseMatrix64F mat)
          Returns the determinant of the matrix.
static DenseMatrix64F diag(DenseMatrix64F ret, int width, double... diagEl)
           
static DenseMatrix64F diag(double... diagEl)
           Creates a new square matrix whose diagonal elements are specified by diagEl and all the other elements are zero.

aij = 0 if i ≤ j
aij = diag[i] if i = j
static DenseMatrix64F diagR(int numRows, int numCols, double... diagEl)
           Creates a new rectangular matrix whose diagonal elements are specified by diagEl and all the other elements are zero.

aij = 0 if i ≤ j
aij = diag[i] if i = j
static void divide(double alpha, D1Matrix64F a)
           Performs an in-place element by element scalar division.

aij = aij
static void divide(double alpha, D1Matrix64F a, D1Matrix64F b)
           Performs an element by element scalar division.

bij = *aij
static void elementDiv(D1Matrix64F a, D1Matrix64F b)
          Performs the an element by element division operation:

aij = aij / bij
static void elementDiv(D1Matrix64F a, D1Matrix64F b, D1Matrix64F c)
          Performs the an element by element division operation:

cij = aij / bij
static double elementMax(D1Matrix64F a)
           Returns the value of the element in the matrix that has the largest value.

Max{ aij } for all i and j
static double elementMaxAbs(D1Matrix64F a)
           Returns the absolute value of the element in the matrix that has the largest absolute value.

Max{ |aij| } for all i and j
static double elementMin(D1Matrix64F a)
           Returns the value of the element in the matrix that has the minimum value.

Min{ aij } for all i and j
static double elementMinAbs(D1Matrix64F a)
           Returns the absolute value of the element in the matrix that has the smallest absolute value.

Min{ |aij| } for all i and j
static void elementMult(D1Matrix64F a, D1Matrix64F b)
          Performs the an element by element multiplication operation:

aij = aij * bij
static void elementMult(D1Matrix64F a, D1Matrix64F b, D1Matrix64F c)
          Performs the an element by element multiplication operation:

cij = aij * bij
static double elementSum(D1Matrix64F mat)
           Computes the sum of all the elements in the matrix:

sum(i=1:m , j=1:n ; aij)
static double elementSumAbs(D1Matrix64F mat)
           Computes the sum of the absolute value all the elements in the matrix:

sum(i=1:m , j=1:n ; |aij|)
static DenseMatrix64F extract(DenseMatrix64F src, int srcY0, int srcY1, int srcX0, int srcX1)
           Creates a new matrix which is the specified submatrix of 'src'
static void extract(Matrix64F src, int srcY0, int srcY1, int srcX0, int srcX1, Matrix64F dst, int dstY0, int dstX0)
           Extracts a submatrix from 'src' and inserts it in a submatrix in 'dst'.
static void extractDiag(DenseMatrix64F src, DenseMatrix64F dst)
           Extracts the diagonal elements 'src' write it to the 'dst' vector.
static DenseMatrix64F identity(int width)
           Creates an identity matrix of the specified size.

aij = 0 if i ≠ j
aij = 1 if i = j
static DenseMatrix64F identity(int numRows, int numCols)
          Creates a rectangular matrix which is zero except along the diagonals.
static void insert(Matrix64F src, Matrix64F dest, int destY0, int destX0)
          Inserts matrix 'src' into matrix 'dest' with the (0,0) of src at (row,col) in dest.
static boolean invert(DenseMatrix64F mat)
           Performs a matrix inversion operation on the specified matrix and stores the results in the same matrix.

a = a-1
static boolean invert(DenseMatrix64F mat, DenseMatrix64F result)
           Performs a matrix inversion operation that does not modify the original and stores the results in another matrix.
static void kron(DenseMatrix64F A, DenseMatrix64F B, DenseMatrix64F C)
           The Kronecker product of two matrices is defined as:
Cij = aijB
where Cij is a sub matrix inside of C ∈ ℜ m*k × n*l, A ∈ ℜ m × n, and B ∈ ℜ k × l.
static void mult(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
          Performs the following operation:

c = α * a * b

cij = α ∑k=1:n { * aik * bkj}
static void mult(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
          Performs the following operation:

c = a * b

cij = ∑k=1:n { aik * bkj}
static void multAdd(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + α * a * b
cij = cij + α * ∑k=1:n { aik * bkj}
static void multAdd(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + a * b
cij = cij + ∑k=1:n { aik * bkj}
static void multAddTransA(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + α * aT * b
cij =cij + α * ∑k=1:n { aki * bkj}
static void multAddTransA(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + aT * b
cij = cij + ∑k=1:n { aki * bkj}
static void multAddTransAB(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + α * aT * bT
cij = cij + α * ∑k=1:n { aki * bjk}
static void multAddTransAB(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + aT * bT
cij = cij + ∑k=1:n { aki * bjk}
static void multAddTransB(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + α * a * bT
cij = cij + α * ∑k=1:n { aik * bjk}
static void multAddTransB(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = c + a * bT
cij = cij + ∑k=1:n { aik * bjk}
static void multInner(RowD1Matrix64F a, RowD1Matrix64F c)
          Computes the matrix multiplication inner product:

c = aT * a

cij = ∑k=1:n { aki * akj}
static void multOuter(RowD1Matrix64F a, RowD1Matrix64F c)
          Computes the matrix multiplication outer product:

c = a * aT

cij = ∑k=1:m { aik * ajk}
static void multTransA(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
          Performs the following operation:

c = α * aT * b

cij = α ∑k=1:n { aki * bkj}
static void multTransA(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
          Performs the following operation:

c = aT * b

cij = ∑k=1:n { aki * bkj}
static void multTransAB(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = α * aT * bT
cij = α ∑k=1:n { aki * bjk}
static void multTransAB(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = aT * bT
cij = ∑k=1:n { aki * bjk}
static void multTransB(double alpha, RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = α * a * bT
cij = α ∑k=1:n { aik * bjk}
static void multTransB(RowD1Matrix64F a, RowD1Matrix64F b, RowD1Matrix64F c)
           Performs the following operation:

c = a * bT
cij = ∑k=1:n { aik * bjk}
static void pinv(DenseMatrix64F A, DenseMatrix64F invA)
           Computes the Moore-Penrose pseudo-inverse:

pinv(A) = (ATA)-1 AT
or
pinv(A) = AT(AAT)-1
static DenseMatrix64F[] rowsToVector(DenseMatrix64F A, DenseMatrix64F[] v)
          Converts the rows in a matrix into a set of vectors.
static void scale(double alpha, D1Matrix64F a)
           Performs an in-place element by element scalar multiplication.

aij = α*aij
static void scale(double alpha, D1Matrix64F a, D1Matrix64F b)
           Performs an element by element scalar multiplication.

bij = α*aij
static void set(D1Matrix64F a, double value)
           Sets every element in the matrix to the specified value.

aij = value
static void setIdentity(RowD1Matrix64F mat)
          Sets all the diagonal elements equal to one and everything else equal to zero.
static boolean solve(DenseMatrix64F a, DenseMatrix64F b, DenseMatrix64F x)
           Solves for x in the following equation:

A*x = b
static void sub(D1Matrix64F a, D1Matrix64F b, D1Matrix64F c)
          Performs the following subtraction operation:

c = a - b
cij = aij - bij
static void subEquals(D1Matrix64F a, D1Matrix64F b)
          Performs the following subtraction operation:

a = a - b
aij = aij - bij
static DenseMatrix64F sumCols(DenseMatrix64F input, DenseMatrix64F output)
           Computes the sum of each column in the input matrix and returns the results in a vector:

bj = sum(i=1:m ; |aij|)
static DenseMatrix64F sumRows(DenseMatrix64F input, DenseMatrix64F output)
           Computes the sum of each row in the input matrix and returns the results in a vector:

bj = sum(i=1:n ; |aji|)
static double trace(RowD1Matrix64F a)
           This computes the trace of the matrix:

trace = ∑i=1:n { aii }
static void transpose(DenseMatrix64F mat)
          Performs an in-place transpose.
static DenseMatrix64F transpose(DenseMatrix64F A, DenseMatrix64F A_tran)
           Transposes matrix 'a' and stores the results in 'b':

bij = aji
where 'b' is the transpose of 'a'.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CommonOps

public CommonOps()
Method Detail

mult

public static void mult(RowD1Matrix64F a,
                        RowD1Matrix64F b,
                        RowD1Matrix64F c)

Performs the following operation:

c = a * b

cij = ∑k=1:n { aik * bkj}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

mult

public static void mult(double alpha,
                        RowD1Matrix64F a,
                        RowD1Matrix64F b,
                        RowD1Matrix64F c)

Performs the following operation:

c = α * a * b

cij = α ∑k=1:n { * aik * bkj}

Parameters:
alpha - Scaling factor.
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multTransA

public static void multTransA(RowD1Matrix64F a,
                              RowD1Matrix64F b,
                              RowD1Matrix64F c)

Performs the following operation:

c = aT * b

cij = ∑k=1:n { aki * bkj}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multTransA

public static void multTransA(double alpha,
                              RowD1Matrix64F a,
                              RowD1Matrix64F b,
                              RowD1Matrix64F c)

Performs the following operation:

c = α * aT * b

cij = α ∑k=1:n { aki * bkj}

Parameters:
alpha - Scaling factor.
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multTransB

public static void multTransB(RowD1Matrix64F a,
                              RowD1Matrix64F b,
                              RowD1Matrix64F c)

Performs the following operation:

c = a * bT
cij = ∑k=1:n { aik * bjk}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multTransB

public static void multTransB(double alpha,
                              RowD1Matrix64F a,
                              RowD1Matrix64F b,
                              RowD1Matrix64F c)

Performs the following operation:

c = α * a * bT
cij = α ∑k=1:n { aik * bjk}

Parameters:
alpha - Scaling factor.
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multTransAB

public static void multTransAB(RowD1Matrix64F a,
                               RowD1Matrix64F b,
                               RowD1Matrix64F c)

Performs the following operation:

c = aT * bT
cij = ∑k=1:n { aki * bjk}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multTransAB

public static void multTransAB(double alpha,
                               RowD1Matrix64F a,
                               RowD1Matrix64F b,
                               RowD1Matrix64F c)

Performs the following operation:

c = α * aT * bT
cij = α ∑k=1:n { aki * bjk}

Parameters:
alpha - Scaling factor.
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multInner

public static void multInner(RowD1Matrix64F a,
                             RowD1Matrix64F c)

Computes the matrix multiplication inner product:

c = aT * a

cij = ∑k=1:n { aki * akj}

Is faster than using a generic matrix multiplication by taking advantage of symmetry. For vectors there is an even faster option, see VectorVectorMult.innerProd(org.ejml.data.D1Matrix64F, org.ejml.data.D1Matrix64F)

Parameters:
a - The matrix being multiplied. Not modified.
c - Where the results of the operation are stored. Modified.

multOuter

public static void multOuter(RowD1Matrix64F a,
                             RowD1Matrix64F c)

Computes the matrix multiplication outer product:

c = a * aT

cij = ∑k=1:m { aik * ajk}

Is faster than using a generic matrix multiplication by taking advantage of symmetry.

Parameters:
a - The matrix being multiplied. Not modified.
c - Where the results of the operation are stored. Modified.

multAdd

public static void multAdd(RowD1Matrix64F a,
                           RowD1Matrix64F b,
                           RowD1Matrix64F c)

Performs the following operation:

c = c + a * b
cij = cij + ∑k=1:n { aik * bkj}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multAdd

public static void multAdd(double alpha,
                           RowD1Matrix64F a,
                           RowD1Matrix64F b,
                           RowD1Matrix64F c)

Performs the following operation:

c = c + α * a * b
cij = cij + α * ∑k=1:n { aik * bkj}

Parameters:
alpha - scaling factor.
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multAddTransA

public static void multAddTransA(RowD1Matrix64F a,
                                 RowD1Matrix64F b,
                                 RowD1Matrix64F c)

Performs the following operation:

c = c + aT * b
cij = cij + ∑k=1:n { aki * bkj}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multAddTransA

public static void multAddTransA(double alpha,
                                 RowD1Matrix64F a,
                                 RowD1Matrix64F b,
                                 RowD1Matrix64F c)

Performs the following operation:

c = c + α * aT * b
cij =cij + α * ∑k=1:n { aki * bkj}

Parameters:
alpha - scaling factor
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multAddTransB

public static void multAddTransB(RowD1Matrix64F a,
                                 RowD1Matrix64F b,
                                 RowD1Matrix64F c)

Performs the following operation:

c = c + a * bT
cij = cij + ∑k=1:n { aik * bjk}

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multAddTransB

public static void multAddTransB(double alpha,
                                 RowD1Matrix64F a,
                                 RowD1Matrix64F b,
                                 RowD1Matrix64F c)

Performs the following operation:

c = c + α * a * bT
cij = cij + α * ∑k=1:n { aik * bjk}

Parameters:
alpha - Scaling factor.
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

multAddTransAB

public static void multAddTransAB(RowD1Matrix64F a,
                                  RowD1Matrix64F b,
                                  RowD1Matrix64F c)

Performs the following operation:

c = c + aT * bT
cij = cij + ∑k=1:n { aki * bjk}

Parameters:
a - The left matrix in the multiplication operation. Not Modified.
b - The right matrix in the multiplication operation. Not Modified.
c - Where the results of the operation are stored. Modified.

multAddTransAB

public static void multAddTransAB(double alpha,
                                  RowD1Matrix64F a,
                                  RowD1Matrix64F b,
                                  RowD1Matrix64F c)

Performs the following operation:

c = c + α * aT * bT
cij = cij + α * ∑k=1:n { aki * bjk}

Parameters:
alpha - Scaling factor.
a - The left matrix in the multiplication operation. Not Modified.
b - The right matrix in the multiplication operation. Not Modified.
c - Where the results of the operation are stored. Modified.

solve

public static boolean solve(DenseMatrix64F a,
                            DenseMatrix64F b,
                            DenseMatrix64F x)

Solves for x in the following equation:

A*x = b

If the system could not be solved then false is returned. If it returns true that just means the algorithm finished operating, but the results could still be bad because 'A' is singular or nearly singular.

If repeat calls to solve are being made then one should consider using LinearSolverFactory instead.

It is ok for 'b' and 'x' to be the same matrix.

Parameters:
a - A matrix that is m by m. Not modified.
b - A matrix that is m by n. Not modified.
x - A matrix that is m by n. Modified.
Returns:
true if it could invert the matrix false if it could not.

transpose

public static void transpose(DenseMatrix64F mat)
Performs an in-place transpose. This algorithm is only efficient for square matrices.

Parameters:
mat - The matrix that is to be transposed. Modified.

transpose

public static DenseMatrix64F transpose(DenseMatrix64F A,
                                       DenseMatrix64F A_tran)

Transposes matrix 'a' and stores the results in 'b':

bij = aji
where 'b' is the transpose of 'a'.

Parameters:
A - The original matrix. Not modified.
A_tran - Where the transpose is stored. If null a new matrix is created. Modified.
Returns:
The transposed matrix.

trace

public static double trace(RowD1Matrix64F a)

This computes the trace of the matrix:

trace = ∑i=1:n { aii }

The trace is only defined for square matrices.

Parameters:
a - A square matrix. Not modified.

det

public static double det(DenseMatrix64F mat)
Returns the determinant of the matrix. If the inverse of the matrix is also needed, then using LUDecompositionAlt directly (or any similar algorithm) can be more efficient.

Parameters:
mat - The matrix whose determinant is to be computed. Not modified.
Returns:
The determinant.

invert

public static boolean invert(DenseMatrix64F mat)

Performs a matrix inversion operation on the specified matrix and stores the results in the same matrix.

a = a-1

If the algorithm could not invert the matrix then false is returned. If it returns true that just means the algorithm finished. The results could still be bad because the matrix is singular or nearly singular.

Parameters:
mat - The matrix that is to be inverted. Results are stored here. Modified.
Returns:
true if it could invert the matrix false if it could not.

invert

public static boolean invert(DenseMatrix64F mat,
                             DenseMatrix64F result)

Performs a matrix inversion operation that does not modify the original and stores the results in another matrix. The two matrices must have the same dimension.

b = a-1

If the algorithm could not invert the matrix then false is returned. If it returns true that just means the algorithm finished. The results could still be bad because the matrix is singular or nearly singular.

For medium to large matrices there might be a slight performance boost to using LinearSolverFactory instead.

Parameters:
mat - The matrix that is to be inverted. Not modified.
result - Where the inverse matrix is stored. Modified.
Returns:
true if it could invert the matrix false if it could not.

pinv

public static void pinv(DenseMatrix64F A,
                        DenseMatrix64F invA)

Computes the Moore-Penrose pseudo-inverse:

pinv(A) = (ATA)-1 AT
or
pinv(A) = AT(AAT)-1

Internally it uses SolvePseudoInverseSvd to compute the inverse. For performance reasons, this should only be used when a matrix is singular or nearly singular.

Parameters:
A - A m by n Matrix. Not modified.
invA - Where the computed pseudo inverse is stored. n by m. Modified.

columnsToVector

public static DenseMatrix64F[] columnsToVector(DenseMatrix64F A,
                                               DenseMatrix64F[] v)
Converts the columns in a matrix into a set of vectors.

Parameters:
A - Matrix. Not modified.
v -
Returns:
An array of vectors.

rowsToVector

public static DenseMatrix64F[] rowsToVector(DenseMatrix64F A,
                                            DenseMatrix64F[] v)
Converts the rows in a matrix into a set of vectors.

Parameters:
A - Matrix. Not modified.
v -
Returns:
An array of vectors.

setIdentity

public static void setIdentity(RowD1Matrix64F mat)
Sets all the diagonal elements equal to one and everything else equal to zero. If this is a square matrix then it will be an identity matrix.

Parameters:
mat - A square matrix.
See Also:
identity(int)

identity

public static DenseMatrix64F identity(int width)

Creates an identity matrix of the specified size.

aij = 0 if i ≠ j
aij = 1 if i = j

Parameters:
width - The width and height of the identity matrix.
Returns:
A new instance of an identity matrix.

identity

public static DenseMatrix64F identity(int numRows,
                                      int numCols)
Creates a rectangular matrix which is zero except along the diagonals.

Parameters:
numRows - Number of rows in the matrix.
numCols - NUmber of columns in the matrix.
Returns:
A matrix with diagonal elements equal to one.

diag

public static DenseMatrix64F diag(double... diagEl)

Creates a new square matrix whose diagonal elements are specified by diagEl and all the other elements are zero.

aij = 0 if i ≤ j
aij = diag[i] if i = j

Parameters:
diagEl - Contains the values of the diagonal elements of the resulting matrix.
Returns:
A new matrix.
See Also:
diagR(int, int, double...)

diag

public static DenseMatrix64F diag(DenseMatrix64F ret,
                                  int width,
                                  double... diagEl)

diagR

public static DenseMatrix64F diagR(int numRows,
                                   int numCols,
                                   double... diagEl)

Creates a new rectangular matrix whose diagonal elements are specified by diagEl and all the other elements are zero.

aij = 0 if i ≤ j
aij = diag[i] if i = j

Parameters:
numRows - Number of rows in the matrix.
numCols - Number of columns in the matrix.
diagEl - Contains the values of the diagonal elements of the resulting matrix.
Returns:
A new matrix.
See Also:
diag(double...)

kron

public static void kron(DenseMatrix64F A,
                        DenseMatrix64F B,
                        DenseMatrix64F C)

The Kronecker product of two matrices is defined as:
Cij = aijB
where Cij is a sub matrix inside of C ∈ ℜ m*k × n*l, A ∈ ℜ m × n, and B ∈ ℜ k × l.

Parameters:
A - The left matrix in the operation. Not modified.
B - The right matrix in the operation. Not modified.
C - Where the results of the operation are stored. Modified.

extract

public static void extract(Matrix64F src,
                           int srcY0,
                           int srcY1,
                           int srcX0,
                           int srcX1,
                           Matrix64F dst,
                           int dstY0,
                           int dstX0)

Extracts a submatrix from 'src' and inserts it in a submatrix in 'dst'.

si-y0 , j-x0 = oij for all y0 ≤ i < y1 and x0 ≤ j < x1

where 'sij' is an element in the submatrix and 'oij' is an element in the original matrix.

Parameters:
src - The original matrix which is to be copied. Not modified.
srcX0 - Start column.
srcX1 - Stop column+1.
srcY0 - Start row.
srcY1 - Stop row+1.
dst - Where the submatrix are stored. Modified.
dstY0 - Start row in dst.
dstX0 - start column in dst.

extract

public static DenseMatrix64F extract(DenseMatrix64F src,
                                     int srcY0,
                                     int srcY1,
                                     int srcX0,
                                     int srcX1)

Creates a new matrix which is the specified submatrix of 'src'

si-y0 , j-x0 = oij for all y0 ≤ i < y1 and x0 ≤ j < x1

where 'sij' is an element in the submatrix and 'oij' is an element in the original matrix.

Parameters:
src - The original matrix which is to be copied. Not modified.
srcX0 - Start column.
srcX1 - Stop column+1.
srcY0 - Start row.
srcY1 - Stop row+1.
Returns:
Extracted submatrix.

extractDiag

public static void extractDiag(DenseMatrix64F src,
                               DenseMatrix64F dst)

Extracts the diagonal elements 'src' write it to the 'dst' vector. 'dst' can either be a row or column vector.

Parameters:
src - Matrix whose diagonal elements are being extracted. Not modified.
dst - A vector the results will be written into. Modified.

insert

public static void insert(Matrix64F src,
                          Matrix64F dest,
                          int destY0,
                          int destX0)
Inserts matrix 'src' into matrix 'dest' with the (0,0) of src at (row,col) in dest. This is equivalent to calling extract(src,0,src.numRows,0,src.numCols,dest,destY0,destX0).

Parameters:
src - matrix that is being copied into dest. Not modified.
dest - Where src is being copied into. Modified.
destY0 - Start row for the copy into dest.
destX0 - Start column for the copy into dest.

elementMax

public static double elementMax(D1Matrix64F a)

Returns the value of the element in the matrix that has the largest value.

Max{ aij } for all i and j

Parameters:
a - A matrix.
Returns:
The max element value of the matrix.

elementMaxAbs

public static double elementMaxAbs(D1Matrix64F a)

Returns the absolute value of the element in the matrix that has the largest absolute value.

Max{ |aij| } for all i and j

Parameters:
a - A matrix.
Returns:
The max element value of the matrix.

elementMin

public static double elementMin(D1Matrix64F a)

Returns the value of the element in the matrix that has the minimum value.

Min{ aij } for all i and j

Parameters:
a - A matrix.
Returns:
The value of element in the matrix with the minimum value.

elementMinAbs

public static double elementMinAbs(D1Matrix64F a)

Returns the absolute value of the element in the matrix that has the smallest absolute value.

Min{ |aij| } for all i and j

Parameters:
a - A matrix.
Returns:
The max element value of the matrix.

elementMult

public static void elementMult(D1Matrix64F a,
                               D1Matrix64F b)

Performs the an element by element multiplication operation:

aij = aij * bij

Parameters:
a - The left matrix in the multiplication operation. Modified.
b - The right matrix in the multiplication operation. Not modified.

elementMult

public static void elementMult(D1Matrix64F a,
                               D1Matrix64F b,
                               D1Matrix64F c)

Performs the an element by element multiplication operation:

cij = aij * bij

Parameters:
a - The left matrix in the multiplication operation. Not modified.
b - The right matrix in the multiplication operation. Not modified.
c - Where the results of the operation are stored. Modified.

elementDiv

public static void elementDiv(D1Matrix64F a,
                              D1Matrix64F b)

Performs the an element by element division operation:

aij = aij / bij

Parameters:
a - The left matrix in the division operation. Modified.
b - The right matrix in the division operation. Not modified.

elementDiv

public static void elementDiv(D1Matrix64F a,
                              D1Matrix64F b,
                              D1Matrix64F c)

Performs the an element by element division operation:

cij = aij / bij

Parameters:
a - The left matrix in the division operation. Not modified.
b - The right matrix in the division operation. Not modified.
c - Where the results of the operation are stored. Modified.

elementSum

public static double elementSum(D1Matrix64F mat)

Computes the sum of all the elements in the matrix:

sum(i=1:m , j=1:n ; aij)

Parameters:
mat - An m by n matrix. Not modified.
Returns:
The sum of the elements.

elementSumAbs

public static double elementSumAbs(D1Matrix64F mat)

Computes the sum of the absolute value all the elements in the matrix:

sum(i=1:m , j=1:n ; |aij|)

Parameters:
mat - An m by n matrix. Not modified.
Returns:
The sum of the absolute value of each element.

sumRows

public static DenseMatrix64F sumRows(DenseMatrix64F input,
                                     DenseMatrix64F output)

Computes the sum of each row in the input matrix and returns the results in a vector:

bj = sum(i=1:n ; |aji|)

Parameters:
input - INput matrix whose rows are summed.
output - Optional storage for output. Must be a vector. If null a row vector is returned. Modified.
Returns:
Vector containing the sum of each row in the input.

sumCols

public static DenseMatrix64F sumCols(DenseMatrix64F input,
                                     DenseMatrix64F output)

Computes the sum of each column in the input matrix and returns the results in a vector:

bj = sum(i=1:m ; |aij|)

Parameters:
input - INput matrix whose rows are summed.
output - Optional storage for output. Must be a vector. If null a column vector is returned. Modified.
Returns:
Vector containing the sum of each row in the input.

addEquals

public static void addEquals(D1Matrix64F a,
                             D1Matrix64F b)

Performs the following operation:

a = a + b
aij = aij + bij

Parameters:
a - A Matrix. Modified.
b - A Matrix. Not modified.

addEquals

public static void addEquals(D1Matrix64F a,
                             double beta,
                             D1Matrix64F b)

Performs the following operation:

a = a + β * b
aij = aij + β * bij

Parameters:
beta - The number that matrix 'b' is multiplied by.
a - A Matrix. Modified.
b - A Matrix. Not modified.

add

public static void add(D1Matrix64F a,
                       D1Matrix64F b,
                       D1Matrix64F c)

Performs the following operation:

c = a + b
cij = aij + bij

Matrix C can be the same instance as Matrix A and/or B.

Parameters:
a - A Matrix. Not modified.
b - A Matrix. Not modified.
c - A Matrix where the results are stored. Modified.

add

public static void add(D1Matrix64F a,
                       double beta,
                       D1Matrix64F b,
                       D1Matrix64F c)

Performs the following operation:

c = a + β * b
cij = aij + β * bij

Matrix C can be the same instance as Matrix A and/or B.

Parameters:
a - A Matrix. Not modified.
beta - Scaling factor for matrix b.
b - A Matrix. Not modified.
c - A Matrix where the results are stored. Modified.

add

public static void add(double alpha,
                       D1Matrix64F a,
                       double beta,
                       D1Matrix64F b,
                       D1Matrix64F c)

Performs the following operation:

c = α * a + β * b
cij = α * aij + β * bij

Matrix C can be the same instance as Matrix A and/or B.

Parameters:
alpha - A scaling factor for matrix a.
a - A Matrix. Not modified.
beta - A scaling factor for matrix b.
b - A Matrix. Not modified.
c - A Matrix where the results are stored. Modified.

add

public static void add(double alpha,
                       D1Matrix64F a,
                       D1Matrix64F b,
                       D1Matrix64F c)

Performs the following operation:

c = α * a + b
cij = α * aij + bij

Matrix C can be the same instance as Matrix A and/or B.

Parameters:
alpha - A scaling factor for matrix a.
a - A Matrix. Not modified.
b - A Matrix. Not modified.
c - A Matrix where the results are stored. Modified.

add

public static void add(D1Matrix64F a,
                       double val)

Performs an in-place scalar addition:

a = a + val
aij = aij + val

Parameters:
a - A matrix. Modified.
val - The value that's added to each element.

add

public static void add(D1Matrix64F a,
                       double val,
                       D1Matrix64F c)

Performs scalar addition:

c = a + val
cij = aij + val

Parameters:
a - A matrix. Not modified.
c - A matrix. Modified.
val - The value that's added to each element.

subEquals

public static void subEquals(D1Matrix64F a,
                             D1Matrix64F b)

Performs the following subtraction operation:

a = a - b
aij = aij - bij

Parameters:
a - A Matrix. Modified.
b - A Matrix. Not modified.

sub

public static void sub(D1Matrix64F a,
                       D1Matrix64F b,
                       D1Matrix64F c)

Performs the following subtraction operation:

c = a - b
cij = aij - bij

Matrix C can be the same instance as Matrix A and/or B.

Parameters:
a - A Matrix. Not modified.
b - A Matrix. Not modified.
c - A Matrix. Modified.

scale

public static void scale(double alpha,
                         D1Matrix64F a)

Performs an in-place element by element scalar multiplication.

aij = α*aij

Parameters:
a - The matrix that is to be scaled. Modified.
alpha - the amount each element is multiplied by.

scale

public static void scale(double alpha,
                         D1Matrix64F a,
                         D1Matrix64F b)

Performs an element by element scalar multiplication.

bij = α*aij

Parameters:
a - The matrix that is to be scaled. Modified.
alpha - the amount each element is multiplied by.

divide

public static void divide(double alpha,
                          D1Matrix64F a)

Performs an in-place element by element scalar division.

aij = aij

Parameters:
a - The matrix whose elements are to be divided. Modified.
alpha - the amount each element is divided by.

divide

public static void divide(double alpha,
                          D1Matrix64F a,
                          D1Matrix64F b)

Performs an element by element scalar division.

bij = *aij

Parameters:
a - The matrix whose elements are to be divided. Modified.
alpha - the amount each element is divided by.

changeSign

public static void changeSign(D1Matrix64F a)

Changes the sign of every element in the matrix.

aij = -aij

Parameters:
a - A matrix. Modified.

set

public static void set(D1Matrix64F a,
                       double value)

Sets every element in the matrix to the specified value.

aij = value

Parameters:
a - A matrix whose elements are about to be set. Modified.
value - The value each element will have.


Copyright © 2012. All Rights Reserved.