public abstract class SimpleBase<T extends SimpleBase<T>>
extends java.lang.Object
implements java.io.Serializable
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.Modifier and Type | Field and Description |
---|---|
protected AutomaticSimpleMatrixConvert |
convertType |
protected org.ejml.data.Matrix |
mat
Internal matrix which this is a wrapper around.
|
protected SimpleOperations |
ops |
Modifier | Constructor and Description |
---|---|
protected |
SimpleBase() |
|
SimpleBase(int numRows,
int numCols) |
Modifier and Type | Method and Description |
---|---|
int |
bits()
Size of internal array elements.
|
T |
cols(int begin,
int end)
Extracts the specified rows from the matrix.
|
T |
combine(int insertRow,
int insertCol,
T B)
Creates a new matrix that is a combination of this matrix and matrix B.
|
T |
concatColumns(SimpleBase... matrices)
Concatinates all the matrices together along their columns.
|
T |
concatRows(SimpleBase... matrices)
Concatinates all the matrices together along their columns.
|
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.
|
T |
createLike()
Creates a matrix that is the same type and shape
|
protected abstract T |
createMatrix(int numRows,
int numCols,
org.ejml.data.MatrixType type)
Used internally for creating new instances of SimpleMatrix.
|
double |
determinant()
Computes the determinant of the matrix.
|
T |
diag()
If a vector then a square matrix is returned if a matrix then a vector of diagonal ements is returned
|
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<T> |
eig()
Returns the Eigen Value Decomposition (EVD) of this matrix.
|
T |
elementDiv(T b)
Returns a matrix which is the result of an element by element division of 'this' and 'b':
ci,j = ai,j/bi,j
|
T |
elementExp()
Returns a matrix which is the result of an element by element exp of 'this'
ci,j = Math.exp(ai,j)
|
T |
elementLog()
Returns a matrix which is the result of an element by element exp of 'this'
ci,j = Math.log(ai,j)
|
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
|
T |
elementPower(double b)
Returns a matrix which is the result of an element by element power of 'this' and 'b':
ci,j = ai,j ^ b
|
T |
elementPower(T b)
Returns a matrix which is the result of an element by element power of 'this' and 'b':
ci,j = ai,j ^ bi,j
|
double |
elementSum()
Computes the sum of all the elements in the matrix.
|
void |
equation(java.lang.String equation,
java.lang.Object... variables)
Allows you to perform an equation in-place on this matrix by specifying the right hand side.
|
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.
|
void |
fill(double val)
Sets all the elements in this matrix equal to the specified value.
aij = val |
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.
|
void |
get(int row,
int col,
org.ejml.data.Complex_F64 output)
Used to get the complex value of a matrix element.
|
org.ejml.data.CMatrixRMaj |
getCDRM() |
org.ejml.data.DMatrixRMaj |
getDDRM() |
org.ejml.data.DMatrixSparseCSC |
getDSCC() |
org.ejml.data.FMatrixRMaj |
getFDRM() |
org.ejml.data.FMatrixSparseCSC |
getFSCC() |
int |
getIndex(int row,
int col)
Returns the index in the matrix's array.
|
<T extends org.ejml.data.Matrix> |
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.
|
org.ejml.data.MatrixType |
getType()
Returns the type of matrix is is wrapping.
|
org.ejml.data.ZMatrixRMaj |
getZDRM() |
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.
|
org.ejml.data.DMatrixIterator |
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(java.lang.String fileName)
Loads a new matrix from a serialized binary file.
|
T |
loadCSV(java.lang.String fileName)
Loads a new matrix from a CSV file.
|
protected static SimpleOperations |
lookupOps(org.ejml.data.MatrixType type) |
T |
minus(double b)
Returns the result of matrix-double subtraction:
c = a - b where c is the returned matrix, a is this matrix, and b is the passed in double. |
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:m ∑j=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 b)
Returns the result of scalar addition:
c = a + b where c is the returned matrix, a is this matrix, and b is the passed in double. |
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(java.lang.String format)
Prints the matrix to standard out given a
PrintStream.printf(java.lang.String, java.lang.Object...) 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.
|
T |
rows(int begin,
int end)
Extracts the specified rows from the matrix.
|
void |
saveToFileBinary(java.lang.String fileName)
Saves this matrix to a file as a serialized binary object.
|
void |
saveToFileCSV(java.lang.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(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(int row,
int col,
double real,
double imaginary)
Used to set the complex value of a matrix element.
|
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 startRow,
double... values)
Assigns consecutive elements inside a column to the provided array.
A(offset:(offset + values.length),column) = values |
protected void |
setMatrix(org.ejml.data.Matrix mat) |
void |
setRow(int row,
int startColumn,
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<T> |
svd()
Computes a full Singular Value Decomposition (SVD) of this matrix with the
eigenvalues ordered from largest to smallest.
|
SimpleSVD<T> |
svd(boolean compact)
Computes the SVD in either compact format or full format.
|
java.lang.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 |
protected abstract T |
wrapMatrix(org.ejml.data.Matrix m) |
void |
zero()
Sets all the elements in the matrix equal to zero.
|
protected org.ejml.data.Matrix mat
protected SimpleOperations ops
protected AutomaticSimpleMatrixConvert convertType
public SimpleBase(int numRows, int numCols)
protected SimpleBase()
protected abstract T createMatrix(int numRows, int numCols, org.ejml.data.MatrixType type)
numRows
- number of rows in the new matrix.numCols
- number of columns in the new matrix.type
- Type of matrix it should createprotected abstract T wrapMatrix(org.ejml.data.Matrix m)
public <T extends org.ejml.data.Matrix> T 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.
public org.ejml.data.DMatrixRMaj getDDRM()
public org.ejml.data.FMatrixRMaj getFDRM()
public org.ejml.data.ZMatrixRMaj getZDRM()
public org.ejml.data.CMatrixRMaj getCDRM()
public org.ejml.data.DMatrixSparseCSC getDSCC()
public org.ejml.data.FMatrixSparseCSC getFSCC()
protected static SimpleOperations lookupOps(org.ejml.data.MatrixType type)
public T transpose()
Returns the transpose of this matrix.
aT
CommonOps_DDRM.transpose(DMatrixRMaj, DMatrixRMaj)
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.
B
- A matrix that is n by bn. Not modified.CommonOps_DDRM.mult(DMatrix1Row, DMatrix1Row, DMatrix1Row)
public T kron(T B)
Computes the Kronecker product between this matrix and the provided B matrix:
C = kron(A,B)
B
- The right matrix in the operation. Not modified.CommonOps_DDRM.kron(DMatrixRMaj, DMatrixRMaj, DMatrixRMaj)
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.
B
- m by n matrix. Not modified.CommonOps_DDRM.mult(DMatrix1Row, DMatrix1Row, DMatrix1Row)
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.
B
- m by n matrix. Not modified.CommonOps_DDRM.subtract(DMatrixD1, DMatrixD1, DMatrixD1)
public T minus(double b)
Returns the result of matrix-double subtraction:
c = a - b
where c is the returned matrix, a is this matrix, and b is the passed in double.
b
- Value subtracted from each elementCommonOps_DDRM.subtract(DMatrixD1, double , DMatrixD1)
public T plus(double b)
Returns the result of scalar addition:
c = a + b
where c is the returned matrix, a is this matrix, and b is the passed in double.
b
- Value added to each elementCommonOps_DDRM.add( DMatrixD1, double , DMatrixD1)
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.
B
- m by n matrix. Not modified.CommonOps_DDRM.add( DMatrixD1, double , DMatrixD1, DMatrixD1)
public double dot(T v)
v
- The second vector in the dot product. Not modified.public boolean isVector()
public T scale(double val)
Returns the result of scaling each element by 'val':
bi,j = val*ai,j
val
- The multiplication factor.CommonOps_DDRM.scale(double, DMatrixD1)
public T divide(double val)
Returns the result of dividing each element by 'val': bi,j = ai,j/val
val
- Divisor.CommonOps_DDRM.divide(DMatrixD1,double)
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.
org.ejml.data.SingularMatrixException
CommonOps_DDRM.invert(DMatrixRMaj, DMatrixRMaj)
public T pseudoInverse()
Computes the Moore-Penrose pseudo-inverse
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.
b
- n by p matrix. Not modified.org.ejml.data.SingularMatrixException
CommonOps_DDRM.solve(DMatrixRMaj, DMatrixRMaj, DMatrixRMaj)
public void set(T a)
a
- The matrix whose value this matrix is being set to.public void fill(double val)
Sets all the elements in this matrix equal to the specified value.
aij = val
val
- The value each element is set to.CommonOps_DDRM.fill(DMatrixD1, double)
public void zero()
CommonOps_DDRM.fill(DMatrixD1, double)
public double normF()
Computes the Frobenius normal of the matrix:
normF = Sqrt{ ∑i=1:m ∑j=1:n { aij2} }
NormOps_DDRM.normF(DMatrixD1)
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.
NormOps_DDRM.conditionP2(DMatrixRMaj)
public double determinant()
CommonOps_DDRM.det(DMatrixRMaj)
public double trace()
Computes the trace of the matrix.
CommonOps_DDRM.trace(DMatrix1Row)
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).
numRows
- The new number of rows in the matrix.numCols
- The new number of columns in the matrix.DMatrixRMaj.reshape(int,int,boolean)
public void set(int row, int col, double value)
row
- The row of the element.col
- The column of the element.value
- The element's new value.public void set(int index, double value)
index
- The matrix element that is being assigned a value.value
- The element's new value.public void set(int row, int col, double real, double imaginary)
row
- The row of the element.col
- The column of the element.real
- Real component of assigned valueimaginary
- Imaginary component of assigned valuepublic void setRow(int row, int startColumn, double... values)
Assigns consecutive elements inside a row to the provided array.
A(row,offset:(offset + values.length)) = values
row
- The row that the array is to be written to.startColumn
- The initial column that the array is written to.values
- Values which are to be written to the row in a matrix.public void setColumn(int column, int startRow, double... values)
Assigns consecutive elements inside a column to the provided array.
A(offset:(offset + values.length),column) = values
column
- The column that the array is to be written to.startRow
- The initial column that the array is written to.values
- Values which are to be written to the row in a matrix.public double get(int row, int col)
row
- The row of the element.col
- The column of the element.public double get(int index)
index
- The element's index whose value is to be returnedDMatrixD1.get(int)
public void get(int row, int col, org.ejml.data.Complex_F64 output)
row
- The row of the element.col
- The column of the element.output
- Storage for the valuepublic int getIndex(int row, int col)
row
- The row number.col
- The column number.DMatrixRMaj.getIndex(int, int)
public org.ejml.data.DMatrixIterator iterator(boolean rowMajor, int minRow, int minCol, int maxRow, int maxCol)
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.public T copy()
public int numRows()
public int numCols()
public int getNumElements()
public void print()
public void print(int numChar, int precision)
public void print(java.lang.String format)
Prints the matrix to standard out given a PrintStream.printf(java.lang.String, java.lang.Object...)
style floating point format,
e.g. print("%f").
public java.lang.String toString()
Converts the array into a string format for display purposes.
The conversion is done using MatrixIO.print(java.io.PrintStream, DMatrix)
.
toString
in class java.lang.Object
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 SimpleMatrix.END then it will be set to the last row or column in the matrix.
y0
- Start row.y1
- Stop row + 1.x0
- Start column.x1
- Stop column + 1.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.
extractRow
- If true a row will be extracted.element
- The row or column the vector is contained in.public T diag()
If a vector then a square matrix is returned if a matrix then a vector of diagonal ements is returned
CommonOps_DDRM.extractDiag(DMatrixRMaj, DMatrixRMaj)
public boolean isIdentical(T a, double tol)
a
- The matrix it is being compared against.tol
- How similar they must be to be equals.public boolean hasUncountable()
public SimpleSVD<T> svd()
public SimpleSVD<T> svd(boolean compact)
public void insertIntoThis(int insertRow, int insertCol, T B)
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.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.
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.public double elementMaxAbs()
public double elementSum()
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
b
- A simple matrix.public T elementDiv(T b)
Returns a matrix which is the result of an element by element division of 'this' and 'b': ci,j = ai,j/bi,j
b
- A simple matrix.public T elementPower(T b)
Returns a matrix which is the result of an element by element power of 'this' and 'b': ci,j = ai,j ^ bi,j
b
- A simple matrix.public T elementPower(double b)
Returns a matrix which is the result of an element by element power of 'this' and 'b': ci,j = ai,j ^ b
b
- Scalarpublic T elementExp()
Returns a matrix which is the result of an element by element exp of 'this' ci,j = Math.exp(ai,j)
public T elementLog()
Returns a matrix which is the result of an element by element exp of 'this' ci,j = Math.log(ai,j)
public T negative()
Returns a new matrix whose elements are the negative of 'this' matrix's elements.
bij = -aij
public void equation(java.lang.String equation, java.lang.Object... variables)
Allows you to perform an equation in-place on this matrix by specifying the right hand side. For information on how to define an equation
see Equation
. The variable sequence alternates between variable and it's label String.
This matrix is by default labeled as 'A', but is a string is the first object in 'variables' then it will take
on that value. The variable passed in can be any data type supported by Equation can be passed in.
This includes matrices and scalars.
perform("A = A + B",matrix,"B"); // Matrix addition perform("A + B",matrix,"B"); // Matrix addition with implicit 'A = ' perform("A(5,:) = B",matrix,"B"); // Insert a row defined by B into A perform("[A;A]"); // stack A twice with implicit 'A = ' perform("Q = B + 2","Q",matrix,"B"); // Specify the name of 'this' as Q
equation
- String representing the symbol equationvariables
- List of variable names and variablespublic void saveToFileBinary(java.lang.String fileName) throws java.io.IOException
Saves this matrix to a file as a serialized binary object.
fileName
- java.io.IOException
MatrixIO.saveBin( DMatrix, String)
public static SimpleMatrix loadBinary(java.lang.String fileName) throws java.io.IOException
Loads a new matrix from a serialized binary file.
fileName
- File which is to be loaded.java.io.IOException
MatrixIO.loadBin(String)
public void saveToFileCSV(java.lang.String fileName) throws java.io.IOException
Saves this matrix to a file in a CSV format. For the file format see MatrixIO
.
fileName
- java.io.IOException
MatrixIO.saveBin( DMatrix, String)
public T loadCSV(java.lang.String fileName) throws java.io.IOException
Loads a new matrix from a CSV file. For the file format see MatrixIO
.
fileName
- File which is to be loaded.java.io.IOException
MatrixIO.loadCSV(String,boolean)
public boolean isInBounds(int row, int col)
row
- Row index.col
- Column index.public void printDimensions()
public int bits()
public T concatColumns(SimpleBase... matrices)
Concatinates all the matrices together along their columns. If the rows do not match the upper elements are set to zero.
A = [ this, m[0] , ... , m[n-1] ]matrices
- Set of matricespublic T concatRows(SimpleBase... matrices)
Concatinates all the matrices together along their columns. If the rows do not match the upper elements are set to zero.
A = [ this; m[0] ; ... ; m[n-1] ]matrices
- Set of matricespublic T rows(int begin, int end)
begin
- First row. Inclusive.end
- Last row + 1.public T cols(int begin, int end)
begin
- First row. Inclusive.end
- Last row + 1.public org.ejml.data.MatrixType getType()
public T createLike()
protected void setMatrix(org.ejml.data.Matrix mat)