api / koma.matrix.ejml / EJMLMatrix
EJMLMatrix
class EJMLMatrix :Matrix<Double>,DoubleMatrixBase
An implementation of the Matrix interface using EJML. You should rarely construct this class directly, instead make one via the top-level functions in creators.kt (e.g. zeros(5,5)) or EJMLMatrixFactory.
Constructors
| Name | Summary |
|---|---|
| <init> | EJMLMatrix(storage: SimpleMatrix)An implementation of the Matrix interface using EJML. You should rarely construct this class directly, instead make one via the top-level functions in creators.kt (e.g. zeros(5,5)) or EJMLMatrixFactory. |
Properties
| Name | Summary |
|---|---|
| storage | var storage: SimpleMatrix |
Inherited Properties
| Name | Summary |
|---|---|
| T | open val T:Matrix<T>Transpose operator. |
| size | open val size:Int |
Functions
| Name | Summary |
|---|---|
| LU | fun LU():Triple<EJMLMatrix,EJMLMatrix,EJMLMatrix>LU Decomposition. Returns p, l, u matrices as a triple. |
| QR | fun QR():Pair<EJMLMatrix,EJMLMatrix> |
| SVD | fun SVD():Triple<EJMLMatrix,EJMLMatrix,EJMLMatrix> |
| chol | fun chol():EJMLMatrix(lower triangular) Cholesky decomposition of the matrix. Matrix must be positive-semi definite. |
| copy | fun copy():EJMLMatrixReturns a copy of this matrix (same values, new memory) |
| det | fun det():DoubleDeterminant of the matrix |
| diag | fun diag():EJMLMatrix |
| div | fun div(other:Int):EJMLMatrixfun div(other:Double):EJMLMatrix |
| elementSum | fun elementSum():DoubleSum of all the elements in the matrix. |
| elementTimes | fun elementTimes(other:Matrix<Double>):EJMLMatrixElement-wise multiplication with another matrix |
| epow | fun epow(other:Double):EJMLMatrixElement-wise exponentiation of each element in the matrix fun epow(other:Int):EJMLMatrix |
| getBaseMatrix | fun getBaseMatrix(): SimpleMatrixReturns the underlying matrix object from the back-end this Matrix is wrapping. This should be used sparingly (as it breaks encapsulation), but it can increase performance by using computation specifically designed for a particular back-end. Code using this method should not rely on a particular back-end, and should always fallback to slow generic code if an unrecognized matrix is returned here (e.g. use get and set) to access the elements generically). |
| getCol | fun getCol(col:Int):EJMLMatrix |
| getDouble | fun getDouble(i:Int, j:Int):Doublefun getDouble(i:Int):Double |
| getDoubleData | fun getDoubleData():DoubleArrayRetrieves the data formatted as doubles in row-major order This method is only for performance over potentially boxing get(Double) methods. This method may or may not return a copy, and thus should be treated as read-only unless backend behavior is known. |
| getFactory | fun getFactory():EJMLMatrixFactoryBecause sometimes all you have is a Matrix, but you really want a MatrixFactory. |
| getRow | fun getRow(row:Int):EJMLMatrix |
| inv | fun inv():EJMLMatrixMatrix inverse (square matrices) |
| max | fun max():DoubleMaximum value contained in the matrix |
| mean | fun mean():DoubleMean (average) of all the elements in the matrix. |
| min | fun min():DoubleMinimum value contained in the matrix |
| minus | fun minus(other:Double):EJMLMatrixfun minus(other:Matrix<Double>):EJMLMatrix |
| normF | fun normF():DoubleFrobenius normal of the matrix |
| normIndP1 | fun normIndP1():DoubleInduced, p=1 normal of the matrix. Equivalent of norm(matrix,1) in scipy. |
| numCols | fun numCols():IntNumber of columns in the matrix |
| numRows | fun numRows():IntNumber of rows in the matrix |
| pinv | fun pinv():EJMLMatrixPseudo-inverse of (non-square) matrix |
| plus | fun plus(other:Matrix<Double>):EJMLMatrixfun plus(other:Double):EJMLMatrix |
| setDouble | fun setDouble(i:Int, v:Double):Unitfun setDouble(i:Int, j:Int, v:Double):Unit |
| solve | fun solve(other:Matrix<Double>):EJMLMatrixSolves A*X=B for X, returning X (X is either column vector or a matrix composed of several col vectors). A is the current matrix, B is the passed in other)/other), and X is the returned matrix. |
| times | fun times(other:Matrix<Double>):EJMLMatrixfun times(other:Double):EJMLMatrix |
| trace | fun trace():DoubleThe matrix trace. |
| transpose | fun transpose():EJMLMatrixTranspose of the matrix |
| unaryMinus | fun unaryMinus():EJMLMatrix |
Inherited Functions
| Name | Summary |
|---|---|
| T | open fun T():Matrix<T>Transpose operator. |
| argMax | abstract fun argMax():IntRow major 1D index. |
| argMin | abstract fun argMin():IntRow major 1D index. |
| asColVector | open fun asColVector():Matrix<T>Returns the given vector as a row vector. Will call transpose() on row vectors |
| asRowVector | open fun asRowVector():Matrix<T>Returns the given vector as a row vector. Will call transpose() on column vectors |
| cumSum | open fun cumSum():Matrix<T>Calculates the cumulative (ongoing) sum of a matrix's elements. For example, cumsum(mat[1,2,3]) would return mat[1,3,6]. Assumes matrix type is convertible to double. |
| expm | abstract fun expm():Matrix<T>Compute the matrix exponential e^x (NOT elementwise) |
| filterCols | open fun filterCols(f: (col:Matrix<T>) ->Boolean):Matrix<T>Builds a new matrix with a subset of the columns of this matrix, using only the columns for which the function f returns true. |
| filterColsIndexed | open fun filterColsIndexed(f: (colIndex:Int, col:Matrix<T>) ->Boolean):Matrix<T>Builds a new matrix with a subset of the columns of this matrix, using only the columns for which the function f returns true. |
| filterRows | open fun filterRows(f: (row:Matrix<T>) ->Boolean):Matrix<T>Builds a new matrix with a subset of the rows of this matrix, using only the rows for which the function f returns true. |
| filterRowsIndexed | open fun filterRowsIndexed(f: (rowIndex:Int, row:Matrix<T>) ->Boolean):Matrix<T>Builds a new matrix with a subset of the rows of this matrix, using only the rows for which the function f returns true. |
| forEachCol | open fun forEachCol(f: (Matrix<T>) ->Unit):UnitPasses each col from left to right into a function. |
| forEachRow | open fun forEachRow(f: (Matrix<T>) ->Unit):UnitPasses each row from top to bottom into a function. |
| getBaseArray | open fun getBaseArray():Any |
| getByte | open fun getByte(vararg indices:Int):Byte |
| getDouble | open fun getDouble(vararg indices:Int):Double |
| getFloat | abstract fun getFloat(i:Int, j:Int):Floatopen fun getFloat(vararg indices:Int):Float |
| getGeneric | abstract fun getGeneric(i:Int, j:Int):Topen fun getGeneric(vararg indices:Int):T |
| getInt | abstract fun getInt(i:Int, j:Int):Intopen fun getInt(vararg indices:Int):Int |
| getLinear | open fun getLinear(index:Int):T |
| getLong | open fun getLong(vararg indices:Int):Long |
| getShort | open fun getShort(vararg indices:Int):Short |
| mapCols | open fun mapCols(f: (Matrix<T>) ->Matrix<T>):Matrix<T>Takes each col in a matrix, passes them through f, and puts the output of f into a col of an output matrix. |
| mapColsToList | open fun <U> mapColsToList(f: (Matrix<T>) ->U):List<U>Takes each col in a matrix, passes them through f, and puts the outputs into a List. In contrast to this#mapCols, the usage of a list as the output container allows for arbitrary output types, such as taking a double matrix and returning a list of strings. |
| mapRows | open fun mapRows(f: (Matrix<T>) ->Matrix<T>):Matrix<T>Takes each row in a matrix, passes them through f, and puts the output of f into a row of an output matrix. |
| mapRowsToList | open fun <U> mapRowsToList(f: (Matrix<T>) ->U):List<U>Takes each row in a matrix, passes them through f, and puts the outputs into a List. In contrast to this#mapRows, the usage of a list as the output container allows for arbitrary output types, such as taking a double matrix and returning a list of strings. |
| pow | open infix fun pow(exponent:Int):Matrix<T>Multiplies the matrix by itself exponent times (using matrix multiplication). |
| repr | open fun repr():String |
| selectCols | open fun selectCols(vararg idxs:Int):Matrix<T>Select a set of cols from a matrix to form the cols of a new matrix. For example, if you wanted a new matrix consisting of the first, second, and fifth cols of an input matrix, you would write input.selectCols(0,1,4).open fun <U :Number> selectCols(idxs:Matrix<U>):Matrix<T> |
| selectRows | open fun selectRows(vararg idxs:Int):Matrix<T>Select a set of rows from a matrix to form the rows of a new matrix. For example, if you wanted a new matrix consisting of the first, second, and fifth rows of an input matrix, you would write input.selectRows(0,1,4).open fun <U :Number> selectRows(idxs:Matrix<U>):Matrix<T> |
| setByte | open fun setByte(vararg indices:Int, value:Byte):Nothing |
| setCol | abstract fun setCol(index:Int, col:Matrix<T>):Unit |
| setDouble | open fun setDouble(vararg indices:Int, value:Double):Unit |
| setFloat | abstract fun setFloat(i:Int, j:Int, v:Float):Unitopen fun setFloat(vararg indices:Int, value:Float):Unit |
| setGeneric | abstract fun setGeneric(i:Int, j:Int, v:T):Unitopen fun setGeneric(vararg indices:Int, value:T):Unit |
| setInt | abstract fun setInt(i:Int, j:Int, v:Int):Unitopen fun setInt(vararg indices:Int, value:Int):Unit |
| setLinear | open fun setLinear(index:Int, value:T):Unit |
| setLong | open fun setLong(vararg indices:Int, value:Long):Nothing |
| setRow | abstract fun setRow(index:Int, row:Matrix<T>):Unit |
| setShort | open fun setShort(vararg indices:Int, value:Short):Nothing |
| shape | open fun shape():List<Int> |
| to2DArray | open fun to2DArray():Array<DoubleArray>Returns a Matrix as a double 2D array. Intended for MATLAB interop. |
| toIterable | open fun toIterable():Iterable<T> |
| wrapRange | open fun wrapRange(range:IntRange, max:Int):IntRange |
Extension Functions
| Name | Summary |
|---|---|
| all | funMatrix<Double>.all(f: (Double) ->Boolean):Booleanfun <T>Matrix<T>.all(f: (T) ->Boolean):BooleanChecks to see if all elements cause f to return true. |
| allClose | funMatrix<Double>.allClose(other:Matrix<Double>, rtol:Double= 1e-05, atol:Double= 1e-08):Boolean |
| any | funMatrix<Double>.any(f: (Double) ->Boolean):Booleanfun <T>Matrix<T>.any(f: (T) ->Boolean):BooleanChecks to see if any element in the matrix causes f to return true. |
| checkIndices | fun <T>NDArray<T>.checkIndices(indices:IntArray):IntArray |
| checkLinearIndex | fun <T>NDArray<T>.checkLinearIndex(index:Int):Int |
| div | operator funNDArray<Double>.div(other:Double):NDArray<Double> |
| emul | infix funMatrix<Double>.emul(other:Matrix<Double>):Matrix<Double>Allow infix operator "a emul b" to be element-wise multiplication of two matrices. |
| fill | funMatrix<Double>.fill(f: (row:Int, col:Int) ->Double):Matrix<Double>fun <T>Matrix<T>.fill(f: (row:Int, col:Int) ->T):Matrix<T>Fills the matrix with the values returned by the input function. funNDArray<Double>.fill(f: (idx:IntArray) ->Double):NDArray<Double>fun <T>NDArray<T>.fill(f: (idx:IntArray) ->T):NDArray<T> |
| fillBoth | funNDArray<Double>.fillBoth(f: (nd:IntArray, linear:Int) ->Double):NDArray<Double>fun <T>NDArray<T>.fillBoth(f: (nd:IntArray, linear:Int) ->T):NDArray<T> |
| fillLinear | funNDArray<Double>.fillLinear(f: (idx:Int) ->Double):NDArray<Double>fun <T>NDArray<T>.fillLinear(f: (idx:Int) ->T):NDArray<T> |
| forEach | fun <T>Matrix<T>.forEach(f: (T) ->Unit):UnitPasses each element in row major order into a function. fun <T>NDArray<T>.forEach(f: (ele:T) ->Unit):UnitTakes each element in a NDArray and passes them through f. |
| forEachIndexed | funMatrix<Double>.forEachIndexed(f: (row:Int, col:Int, ele:Double) ->Unit):Unitfun <T>Matrix<T>.forEachIndexed(f: (row:Int, col:Int, ele:T) ->Unit):UnitPasses each element in row major order into a function along with its index location. funNDArray<Double>.forEachIndexed(f: (idx:Int, ele:Double) ->Unit):Unitfun <T>NDArray<T>.forEachIndexed(f: (idx:Int, ele:T) ->Unit):UnitTakes each element in a NDArray and passes them through f. Index given to f is a linear index, depending on the underlying storage major dimension. |
| forEachIndexedN | funNDArray<Double>.forEachIndexedN(f: (idx:IntArray, ele:Double) ->Unit):Unitfun <T>NDArray<T>.forEachIndexedN(f: (idx:IntArray, ele:T) ->Unit):UnitTakes each element in a NDArray and passes them through f. Index given to f is the full ND index of the element. |
| linearToNIdx | fun <T>NDArray<T>.linearToNIdx(linear:Int):IntArrayGiven the 1D index of an element in the underlying storage, find the corresponding ND index. Inverse of nIdxToLinear. |
| map | fun <T>Matrix<T>.map(f: (T) ->T):Matrix<T>Takes each element in a matrix, passes them through f, and puts the output of f into an output matrix. This process is done in row-major order. fun <T>NDArray<T>.map(f: (T) ->T):DefaultGenericNDArray<T>Takes each element in a NDArray, passes them through f, and puts the output of f into an output NDArray. |
| mapIndexed | funMatrix<Double>.mapIndexed(f: (row:Int, col:Int, ele:Double) ->Double):Matrix<Double>fun <T>Matrix<T>.mapIndexed(f: (row:Int, col:Int, ele:T) ->T):Matrix<T>Takes each element in a matrix, passes them through f, and puts the output of f into an output matrix. This process is done in row-major order. funNDArray<Double>.mapIndexed(f: (idx:Int, ele:Double) ->Double):NDArray<Double>fun <T>NDArray<T>.mapIndexed(f: (idx:Int, ele:T) ->T):DefaultGenericNDArray<T>Takes each element in a NDArray, passes them through f, and puts the output of f into an output NDArray. Index given to f is a linear index, depending on the underlying storage major dimension. |
| mapIndexedN | funNDArray<Double>.mapIndexedN(f: (idx:IntArray, ele:Double) ->Double):NDArray<Double>fun <T>NDArray<T>.mapIndexedN(f: (idx:IntArray, ele:T) ->T):NDArray<T>Takes each element in a NDArray, passes them through f, and puts the output of f into an output NDArray. Index given to f is the full ND index of the element. |
| minus | operator funNDArray<Double>.minus(other:Double):NDArray<Double>operator funNDArray<Double>.minus(other:NDArray<Double>):NDArray<Double>``operator funMatrix<Double>.minus(value:Int):Matrix<Double>Allow operator overloading with non-Double scalars |
| nIdxToLinear | fun <T>NDArray<T>.nIdxToLinear(indices:IntArray):IntGiven a ND index into this array, find the corresponding 1D index in the raw underlying 1D storage array. |
| plus | operator funNDArray<Double>.plus(other:Double):NDArray<Double>operator funNDArray<Double>.plus(other:NDArray<Double>):NDArray<Double>``operator funMatrix<Double>.plus(value:Int):Matrix<Double>Allow operator overloading with non-Double scalars |
| pow | infix funNDArray<Double>.pow(exponent:Int):NDArray<Double> |
| safeNIdxToLinear | fun <T>NDArray<T>.safeNIdxToLinear(indices:IntArray):Int |
| set | operator funMatrix<Double>.set(i:Int, v:Double):Unitoperator fun <T>Matrix<T>.set(i:Int, v:T):UnitSet the ith element in the matrix. If 2D, selects elements in row-major order. operator funMatrix<Double>.set(i:Int, j:Int, v:Double):Unitoperator funMatrix<Double>.set(rows:IntRange, cols:IntRange, value:Double):Unitoperator funMatrix<Double>.set(rows:Int, cols:IntRange, value:Double):Unitoperator funMatrix<Double>.set(rows:IntRange, cols:Int, value:Double):Unitoperator funMatrix<Double>.set(i:Int, v:Int):Unitoperator funMatrix<Double>.set(i:Int, j:Int, v:Int):Unitoperator fun <T>Matrix<T>.set(i:Int, j:Int, v:T):Unitoperator fun <T>Matrix<T>.set(rows:IntRange, cols:IntRange, value:T):Unitoperator fun <T>Matrix<T>.set(rows:Int, cols:IntRange, value:T):Unitoperator fun <T>Matrix<T>.set(rows:IntRange, cols:Int, value:T):Unitoperator funNDArray<Double>.set(vararg indices:Int, value:NDArray<Double>):Unitoperator funNDArray<Double>.set(vararg indices:Int, value:Double):Unitoperator fun <T>NDArray<T>.set(vararg indices:Int, value:NDArray<T>):Unitoperator fun <T>NDArray<T>.set(vararg indices:Int, value:T):Unitoperator funMatrix<Double>.set(rows:IntRange, cols:IntRange, value:Matrix<Double>):Unitoperator fun <T>Matrix<T>.set(rows:IntRange, cols:IntRange, value:Matrix<T>):UnitAllow assignment to a slice, e.g. matrix[1..2, 3..4]=something. Note that the range 1..2 is inclusive, so it will retrieve row 1 and 2. Use 1.until(2) for a non-inclusive range.operator funMatrix<Double>.set(rows:Int, cols:IntRange, value:Matrix<Double>):Unitoperator fun <T>Matrix<T>.set(rows:Int, cols:IntRange, value:Matrix<T>):UnitAllow assignment to a slice, e.g. matrix[2, 3..4]=something. Note that the range 3..4 is inclusive, so it will retrieve col 3 and 4. Use 1.until(2) for a non-inclusive range.operator funMatrix<Double>.set(rows:IntRange, cols:Int, value:Matrix<Double>):Unitoperator fun <T>Matrix<T>.set(rows:IntRange, cols:Int, value:Matrix<T>):UnitAllow assignment to a slice, e.g. matrix[1..2, 3]=something. Note that the range 1..2 is inclusive, so it will retrieve row 1 and 2. Use 1.until(2) for a non-inclusive range. |
| times | operator funNDArray<Double>.times(other:NDArray<Double>):NDArray<Double>operator funNDArray<Double>.times(other:Double):NDArray<Double>``operator funMatrix<Double>.times(other:Int):Matrix<Double>Multiply a scalar by a matrix |
| toDoubleArray | funNDArray<Double>.toDoubleArray():DoubleArrayConverts this NDArray into a one-dimensional DoubleArray in row-major order. |
| toMatrix | funNDArray<Double>.toMatrix():Matrix<Double> |
| toMatrixOrNull | fun <T>NDArray<T>.toMatrixOrNull():Matrix<T>? |
| toTypedArray | fun <T>NDArray<T>.toTypedArray():Array<T>Converts this NDArray into a one-dimensional Array in row-major order. |
| unaryMinus | operator funNDArray<Double>.unaryMinus():NDArray<Double> |
| validate | funMatrix<Double>.validate(fn:ValidationContext.() ->Unit):UnitUse the given fn to validate a matrix. Return either the matrix itself or a copy that has been transformed to match the validation rules. funMatrix<Double>.validate(name:String, fn:ValidationContext.() ->Unit):UnitUse the given fn to validate a matrix with the given name. Return either the matrix itself or a copy that has been transformed to match the validation rules. |
| widthOfDims | fun <T>NDArray<T>.widthOfDims():ArrayList<Int> |