org.ejml.simple
Class SimpleBase<T extends SimpleBase>

java.lang.Object
  extended by org.ejml.simple.SimpleBase<T>
Direct Known Subclasses:
SimpleMatrix

public abstract class SimpleBase<T extends SimpleBase>
extends Object

Parent of SimpleMatrix implements all the standard matrix operations and uses generics to allow the returned matrix type to be changed. This class should be extended instead of SimpleMatrix.

Author:
Peter Abeles

Field Summary
protected  DenseMatrix64F mat
          Internal matrix which this is a wrapper around.
 
Constructor Summary
protected SimpleBase()
           
  SimpleBase(int numRows, int numCols)
           
 
Method Summary
 T combine(int insertRow, int insertCol, T B)
           Creates a new matrix that is a combination of this matrix and matrix B.
 double conditionP2()
           The condition p = 2 number of a matrix is used to measure the sensitivity of the linear system Ax=b.
 T copy()
          Creates and returns a matrix which is idential to this one.
protected abstract  T createMatrix(int numRows, int numCols)
          Used internally for creating new instances of SimpleMatrix.
 double determinant()
          Computes the determinant of the matrix.
 T divide(double val)
           Returns the result of dividing each element by 'val': bi,j = ai,j/val
 double dot(T v)
          Computes the dot product (a.k.a.
 SimpleEVD eig()
          Returns the Eigen Value Decomposition (EVD) of this matrix.
 double elementMaxAbs()
          Returns the maximum absolute value of all the elements in this matrix.
 T elementMult(T b)
           Returns a matrix which is the result of an element by element multiplication of 'this' and 'b': ci,j = ai,j*bi,j
 double elementSum()
          Computes the sum of all the elements in the matrix.
 T extractDiag()
           Extracts the diagonal from this matrix and returns them inside a column vector.
 T extractMatrix(int y0, int y1, int x0, int x1)
           Creates a new SimpleMatrix which is a submatrix of this matrix.
 T extractVector(boolean extractRow, int element)
           Extracts a row or column from this matrix.
 double get(int index)
          Returns the value of the matrix at the specified index of the 1D row major array.
 double get(int row, int col)
          Returns the value of the specified matrix element.
 int getIndex(int row, int col)
          Returns the index in the matrix's array.
 DenseMatrix64F getMatrix()
           Returns a reference to the matrix that it uses internally.
 int getNumElements()
          Returns the number of elements in this matrix, which is equal to the number of rows times the number of columns.
 boolean hasUncountable()
          Checks to see if any of the elements in this matrix are either NaN or infinite.
 void insertIntoThis(int insertRow, int insertCol, T B)
          Copy matrix B into this matrix at location (insertRow, insertCol).
 T invert()
           Returns the inverse of this matrix.

b = a-1
 boolean isIdentical(T a, double tol)
          Checks to see if matrix 'a' is the same as this matrix within the specified tolerance.
 boolean isInBounds(int row, int col)
          Returns true of the specified matrix element is valid element inside this matrix.
 boolean isVector()
          Returns true if this matrix is a vector.
 MatrixIterator iterator(boolean rowMajor, int minRow, int minCol, int maxRow, int maxCol)
          Creates a new iterator for traversing through a submatrix inside this matrix.
 T kron(T B)
           Computes the Kronecker product between this matrix and the provided B matrix:

C = kron(A,B)
static SimpleMatrix loadBinary(String fileName)
           Loads a new matrix from a serialized binary file.
static SimpleMatrix loadCSV(String fileName)
           Loads a new matrix from a CSV file.
 T minus(T b)
           Returns the result of matrix subtraction:

c = a - b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.
 T mult(T b)
           Returns a matrix which is the result of matrix multiplication:

c = a * b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.
 T negative()
           Returns a new matrix whose elements are the negative of 'this' matrix's elements.

bij = -aij
 double normF()
           Computes the Frobenius normal of the matrix:

normF = Sqrt{ ∑i=1:mj=1:n { aij2} }
 int numCols()
          Returns the number of columns in this matrix.
 int numRows()
          Returns the number of rows in this matrix.
 T plus(double beta, T b)
           Performs a matrix addition and scale operation.

c = a + β*b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.
 T plus(T b)
           Returns the result of matrix addition:

c = a + b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.
 void print()
          Prints the matrix to standard out.
 void print(int numChar, int precision)
          Prints the matrix to standard out with the specified precision.
 void print(String format)
           Prints the matrix to standard out given a {@link java.io.PrintStream#printf) style floating point format, e.g.
 void printDimensions()
          Prints the number of rows and column in this matrix.
 T pseudoInverse()
           Computes the Moore-Penrose pseudo-inverse
 void reshape(int numRows, int numCols)
           Reshapes the matrix to the specified number of rows and columns.
 void saveToFileBinary(String fileName)
           Saves this matrix to a file as a serialized binary object.
 void saveToFileCSV(String fileName)
           Saves this matrix to a file in a CSV format.
 T scale(double val)
           Returns the result of scaling each element by 'val':
bi,j = val*ai,j
 void set(double val)
           Sets all the elements in this matrix equal to the specified value.

aij = val
 void set(int index, double value)
          Assigns an element a value based on its index in the internal array..
 void set(int row, int col, double value)
          Assigns the element in the Matrix to the specified value.
 void set(T a)
          Sets the elements in this matrix to be equal to the elements in the passed in matrix.
 void setColumn(int column, int offset, double... values)
           Assigns consecutive elements inside a column to the provided array.

A(offset:(offset + values.length),column) = values
 void setRow(int row, int offset, double... values)
           Assigns consecutive elements inside a row to the provided array.

A(row,offset:(offset + values.length)) = values
 T solve(T b)
           Solves for X in the following equation:

x = a-1b

where 'a' is this matrix and 'b' is an n by p matrix.
 SimpleSVD svd()
          Computes a full Singular Value Decomposition (SVD) of this matrix with the eigenvalues ordered from largest to smallest.
 SimpleSVD svd(boolean compact)
          Computes the SVD in either compact format or full format.
 String toString()
           Converts the array into a string format for display purposes.
 double trace()
           Computes the trace of the matrix.
 T transpose()
           Returns the transpose of this matrix.
aT
 void zero()
          Sets all the elements in the matrix equal to zero.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

mat

protected DenseMatrix64F mat
Internal matrix which this is a wrapper around.

Constructor Detail

SimpleBase

public SimpleBase(int numRows,
                  int numCols)

SimpleBase

protected SimpleBase()
Method Detail

createMatrix

protected abstract T createMatrix(int numRows,
                                  int numCols)
Used internally for creating new instances of SimpleMatrix. If SimpleMatrix is extended by another class this function should be overridden so that the returned matrices are of the correct type.

Parameters:
numRows - number of rows in the new matrix.
numCols - number of columns in the new matrix.
Returns:
A new matrix.

getMatrix

public DenseMatrix64F getMatrix()

Returns a reference to the matrix that it uses internally. This is useful when an operation is needed that is not provided by this class.

Returns:
Reference to the internal DenseMatrix64F.

transpose

public T transpose()

Returns the transpose of this matrix.
aT

Returns:
A matrix that is n by m.
See Also:
CommonOps.transpose(DenseMatrix64F,DenseMatrix64F)

mult

public T mult(T b)

Returns a matrix which is the result of matrix multiplication:

c = a * b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.

Parameters:
b - A matrix that is n by bn. Not modified.
Returns:
The results of this operation.
See Also:
CommonOps.mult(org.ejml.data.RowD1Matrix64F , org.ejml.data.RowD1Matrix64F , org.ejml.data.RowD1Matrix64F)

kron

public T kron(T B)

Computes the Kronecker product between this matrix and the provided B matrix:

C = kron(A,B)

Parameters:
B - The right matrix in the operation. Not modified.
Returns:
Kronecker product between this matrix and B.
See Also:
CommonOps.kron(DenseMatrix64F, DenseMatrix64F, DenseMatrix64F)

plus

public T plus(T b)

Returns the result of matrix addition:

c = a + b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.

Parameters:
b - m by n matrix. Not modified.
Returns:
The results of this operation.
See Also:
CommonOps.mult(org.ejml.data.RowD1Matrix64F , org.ejml.data.RowD1Matrix64F , org.ejml.data.RowD1Matrix64F)

minus

public T minus(T b)

Returns the result of matrix subtraction:

c = a - b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.

Parameters:
b - m by n matrix. Not modified.
Returns:
The results of this operation.
See Also:
CommonOps.sub(org.ejml.data.D1Matrix64F , org.ejml.data.D1Matrix64F , org.ejml.data.D1Matrix64F)

plus

public T plus(double beta,
              T b)

Performs a matrix addition and scale operation.

c = a + β*b

where c is the returned matrix, a is this matrix, and b is the passed in matrix.

Parameters:
b - m by n matrix. Not modified.
Returns:
A matrix that contains the results.
See Also:
CommonOps.add( org.ejml.data.D1Matrix64F , double , org.ejml.data.D1Matrix64F , org.ejml.data.D1Matrix64F)

dot

public double dot(T v)
Computes the dot product (a.k.a. inner product) between this vector and vector 'v'.

Parameters:
v - The second vector in the dot product. Not modified.
Returns:
dot product

isVector

public boolean isVector()
Returns true if this matrix is a vector. A vector is defined as a matrix that has either one row or column.

Returns:
Returns true for vectors and false otherwise.

scale

public T scale(double val)

Returns the result of scaling each element by 'val':
bi,j = val*ai,j

Parameters:
val - The multiplication factor.
Returns:
The scaled matrix.
See Also:
CommonOps.scale(double, org.ejml.data.D1Matrix64F)

divide

public T divide(double val)

Returns the result of dividing each element by 'val': bi,j = ai,j/val

Parameters:
val - Divisor.
Returns:
Matrix with its elements divided by the specified value.
See Also:
CommonOps.divide(double, org.ejml.data.D1Matrix64F)

invert

public T invert()

Returns the inverse of this matrix.

b = a-1

If the matrix could not be inverted then SingularMatrixException is thrown. Even if no exception is thrown the matrix could still be singular or nearly singular.

Returns:
The inverse of this matrix.
Throws:
SingularMatrixException
See Also:
CommonOps.invert(DenseMatrix64F, DenseMatrix64F)

pseudoInverse

public T pseudoInverse()

Computes the Moore-Penrose pseudo-inverse

Returns:
inverse computed using the pseudo inverse.

solve

public T solve(T b)

Solves for X in the following equation:

x = a-1b

where 'a' is this matrix and 'b' is an n by p matrix.

If the system could not be solved then SingularMatrixException is thrown. Even if no exception is thrown 'a' could still be singular or nearly singular.

Parameters:
b - n by p matrix. Not modified.
Returns:
The solution for 'x' that is n by p.
Throws:
SingularMatrixException
See Also:
CommonOps.solve(DenseMatrix64F, DenseMatrix64F, DenseMatrix64F)

set

public void set(T a)
Sets the elements in this matrix to be equal to the elements in the passed in matrix. Both matrix must have the same dimension.

Parameters:
a - The matrix whose value this matrix is being set to.

set

public void set(double val)

Sets all the elements in this matrix equal to the specified value.

aij = val

Parameters:
val - The value each element is set to.
See Also:
CommonOps.set(org.ejml.data.D1Matrix64F , double)

zero

public void zero()
Sets all the elements in the matrix equal to zero.

See Also:
CommonOps.set(org.ejml.data.D1Matrix64F , double)

normF

public double normF()

Computes the Frobenius normal of the matrix:

normF = Sqrt{ ∑i=1:mj=1:n { aij2} }

Returns:
The matrix's Frobenius normal.
See Also:
NormOps.normF(org.ejml.data.D1Matrix64F)

conditionP2

public double conditionP2()

The condition p = 2 number of a matrix is used to measure the sensitivity of the linear system Ax=b. A value near one indicates that it is a well conditioned matrix.

Returns:
The condition number.
See Also:
NormOps.conditionP2(DenseMatrix64F)

determinant

public double determinant()
Computes the determinant of the matrix.

Returns:
The determinant.
See Also:
CommonOps.det(DenseMatrix64F)

trace

public double trace()

Computes the trace of the matrix.

Returns:
The trace of the matrix.
See Also:
CommonOps.trace(org.ejml.data.RowD1Matrix64F)

reshape

public void reshape(int numRows,
                    int numCols)

Reshapes the matrix to the specified number of rows and columns. If the total number of elements is <= number of elements it had before the data is saved. Otherwise a new internal array is declared and the old data lost.

This is equivalent to calling A.getMatrix().reshape(numRows,numCols,false).

Parameters:
numRows - The new number of rows in the matrix.
numCols - The new number of columns in the matrix.
See Also:
Matrix64F.reshape(int,int,boolean)

set

public void set(int row,
                int col,
                double value)
Assigns the element in the Matrix to the specified value. Performs a bounds check to make sure the requested element is part of the matrix.

Parameters:
row - The row of the element.
col - The column of the element.
value - The element's new value.

set

public void set(int index,
                double value)
Assigns an element a value based on its index in the internal array..

Parameters:
index - The matrix element that is being assigned a value.
value - The element's new value.

setRow

public void setRow(int row,
                   int offset,
                   double... values)

Assigns consecutive elements inside a row to the provided array.

A(row,offset:(offset + values.length)) = values

Parameters:
row - The row that the array is to be written to.
offset - The initial column that the array is written to.
values - Values which are to be written to the row in a matrix.

setColumn

public void setColumn(int column,
                      int offset,
                      double... values)

Assigns consecutive elements inside a column to the provided array.

A(offset:(offset + values.length),column) = values

Parameters:
column - The column that the array is to be written to.
offset - The initial column that the array is written to.
values - Values which are to be written to the row in a matrix.

get

public double get(int row,
                  int col)
Returns the value of the specified matrix element. Performs a bounds check to make sure the requested element is part of the matrix.

Parameters:
row - The row of the element.
col - The column of the element.
Returns:
The value of the element.

get

public double get(int index)
Returns the value of the matrix at the specified index of the 1D row major array.

Parameters:
index - The element's index whose value is to be returned
Returns:
The value of the specified element.
See Also:
D1Matrix64F.get(int)

getIndex

public int getIndex(int row,
                    int col)
Returns the index in the matrix's array.

Parameters:
row - The row number.
col - The column number.
Returns:
The index of the specified element.
See Also:
DenseMatrix64F.getIndex(int, int)

iterator

public MatrixIterator iterator(boolean rowMajor,
                               int minRow,
                               int minCol,
                               int maxRow,
                               int maxCol)
Creates a new iterator for traversing through a submatrix inside this matrix. It can be traversed by row or by column. Range of elements is inclusive, e.g. minRow = 0 and maxRow = 1 will include rows 0 and 1. The iteration starts at (minRow,minCol) and ends at (maxRow,maxCol)

Parameters:
rowMajor - true means it will traverse through the submatrix by row first, false by columns.
minRow - first row it will start at.
minCol - first column it will start at.
maxRow - last row it will stop at.
maxCol - last column it will stop at.
Returns:
A new MatrixIterator

copy

public T copy()
Creates and returns a matrix which is idential to this one.

Returns:
A new identical matrix.

numRows

public int numRows()
Returns the number of rows in this matrix.

Returns:
number of rows.

numCols

public int numCols()
Returns the number of columns in this matrix.

Returns:
number of columns.

getNumElements

public int getNumElements()
Returns the number of elements in this matrix, which is equal to the number of rows times the number of columns.

Returns:
The number of elements in the matrix.

print

public void print()
Prints the matrix to standard out.


print

public void print(int numChar,
                  int precision)
Prints the matrix to standard out with the specified precision.


print

public void print(String format)

Prints the matrix to standard out given a {@link java.io.PrintStream#printf) style floating point format, e.g. print("%f").


toString

public String toString()

Converts the array into a string format for display purposes. The conversion is done using MatrixIO.print(java.io.PrintStream, org.ejml.data.Matrix64F).

Overrides:
toString in class Object
Returns:
String representation of the matrix.

extractMatrix

public T extractMatrix(int y0,
                       int y1,
                       int x0,
                       int x1)

Creates a new SimpleMatrix which is a submatrix of this matrix.

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.

If any of the inputs are set to T.END then it will be set to the last row or column in the matrix.

Parameters:
x0 - Start column.
x1 - Stop column.
y0 - Start row.
y1 - Stop row.
Returns:
The submatrix.

extractVector

public T extractVector(boolean extractRow,
                       int element)

Extracts a row or column from this matrix. The returned vector will either be a row or column vector depending on the input type.

Parameters:
extractRow - If true a row will be extracted.
element - The row or column the vector is contained in.
Returns:
Extracted vector.

extractDiag

public T extractDiag()

Extracts the diagonal from this matrix and returns them inside a column vector.

Returns:
Diagonal elements inside a column vector.
See Also:
CommonOps.extractDiag(DenseMatrix64F, DenseMatrix64F)

isIdentical

public boolean isIdentical(T a,
                           double tol)
Checks to see if matrix 'a' is the same as this matrix within the specified tolerance.

Parameters:
a - The matrix it is being compared against.
tol - How similar they must be to be equals.
Returns:
If they are equal within tolerance of each other.

hasUncountable

public boolean hasUncountable()
Checks to see if any of the elements in this matrix are either NaN or infinite.

Returns:
True of an element is NaN or infinite. False otherwise.

svd

public SimpleSVD svd()
Computes a full Singular Value Decomposition (SVD) of this matrix with the eigenvalues ordered from largest to smallest.

Returns:
SVD

svd

public SimpleSVD svd(boolean compact)
Computes the SVD in either compact format or full format.

Returns:
SVD of this matrix.

eig

public SimpleEVD eig()
Returns the Eigen Value Decomposition (EVD) of this matrix.


insertIntoThis

public void insertIntoThis(int insertRow,
                           int insertCol,
                           T B)
Copy matrix B into this matrix at location (insertRow, insertCol).

Parameters:
insertRow - First row the matrix is to be inserted into.
insertCol - First column the matrix is to be inserted into.
B - The matrix that is being inserted.

combine

public T combine(int insertRow,
                 int insertCol,
                 T B)

Creates a new matrix that is a combination of this matrix and matrix B. B is written into A at the specified location if needed the size of A is increased by growing it. A is grown by padding the new area with zeros.

While useful when adding data to a matrix which will be solved for it is also much less efficient than predeclaring a matrix and inserting data into it.

If insertRow or insertCol is set to SimpleMatrix.END then it will be combined at the last row or column respectively.

Parameters:
insertRow - Row where matrix B is written in to.
insertCol - Column where matrix B is written in to.
B - The matrix that is written into A.
Returns:
A new combined matrix.

elementMaxAbs

public double elementMaxAbs()
Returns the maximum absolute value of all the elements in this matrix. This is equivalent the the infinite p-norm of the matrix.

Returns:
Largest absolute value of any element.

elementSum

public double elementSum()
Computes the sum of all the elements in the matrix.

Returns:
Sum of all the elements.

elementMult

public T elementMult(T b)

Returns a matrix which is the result of an element by element multiplication of 'this' and 'b': ci,j = ai,j*bi,j

Parameters:
b - A simple matrix.
Returns:
The element by element multiplication of 'this' and 'b'.

negative

public T negative()

Returns a new matrix whose elements are the negative of 'this' matrix's elements.

bij = -aij

Returns:
A matrix that is the negative of the original.

saveToFileBinary

public void saveToFileBinary(String fileName)
                      throws IOException

Saves this matrix to a file as a serialized binary object.

Parameters:
fileName -
Throws:
IOException
See Also:
MatrixIO.saveBin( org.ejml.data.Matrix64F , String)

loadBinary

public static SimpleMatrix loadBinary(String fileName)
                               throws IOException

Loads a new matrix from a serialized binary file.

Parameters:
fileName - File which is to be loaded.
Returns:
The matrix.
Throws:
IOException
See Also:
MatrixIO.loadBin(String)

saveToFileCSV

public void saveToFileCSV(String fileName)
                   throws IOException

Saves this matrix to a file in a CSV format. For the file format see MatrixIO.

Parameters:
fileName -
Throws:
IOException
See Also:
MatrixIO.saveBin( org.ejml.data.Matrix64F , String)

loadCSV

public static SimpleMatrix loadCSV(String fileName)
                            throws IOException

Loads a new matrix from a CSV file. For the file format see MatrixIO.

Parameters:
fileName - File which is to be loaded.
Returns:
The matrix.
Throws:
IOException
See Also:
MatrixIO.loadCSV(String)

isInBounds

public boolean isInBounds(int row,
                          int col)
Returns true of the specified matrix element is valid element inside this matrix.

Parameters:
row - Row index.
col - Column index.
Returns:
true if it is a valid element in the matrix.

printDimensions

public void printDimensions()
Prints the number of rows and column in this matrix.



Copyright © 2012. All Rights Reserved.