api / koma.matrix.common / MatrixBase

MatrixBase

abstract class MatrixBase<T> :Matrix<T>

Constructors

Name Summary
<init> MatrixBase()

Inherited Properties

Name Summary
T open val T:Matrix<T>
Transpose operator.
size open val size:Int

Functions

Name Summary
castOrCopy fun <DType, TOuter :Matrix<DType>, TInner> castOrCopy(mat:Matrix<DType>, makeOuter: (TInner) ->TOuter, outerFac:MatrixFactory<TOuter>):TOuter
Attempts to downcast a matrix to its specific subclass, accepting both inner wrapped types and outer types. Requires the TOuter constructor to be passed in because reified generics don't support ctor calls. If the passed mat cannot be cast, instead copies the data manually into a newly allocated matrix of the correct type.
equals open fun equals(other:Any?):Boolean
hashCode open fun hashCode():Int
toString open fun toString():String

Inherited Functions

Name Summary
LU abstract fun LU():Triple<Matrix<T>,Matrix<T>,Matrix<T>>
LU Decomposition. Returns p, l, u matrices as a triple.
QR abstract fun QR():Pair<Matrix<T>,Matrix<T>>
SVD abstract fun SVD():Triple<Matrix<T>,Matrix<T>,Matrix<T>>
T open fun T():Matrix<T>
Transpose operator.
argMax abstract fun argMax():Int
Row major 1D index.
argMin abstract fun argMin():Int
Row 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
chol abstract fun chol():Matrix<T>
(lower triangular) Cholesky decomposition of the matrix. Matrix must be positive-semi definite.
copy abstract fun copy():Matrix<T>
Returns a copy of this matrix (same values, new memory)
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.
det abstract fun det():T
Determinant of the matrix
diag abstract fun diag():Matrix<T>
div abstract operator fun div(other:Int):Matrix<T>
abstract operator fun div(other:T):Matrix<T>
elementSum abstract fun elementSum():T
Sum of all the elements in the matrix.
elementTimes abstract fun elementTimes(other:Matrix<T>):Matrix<T>
Element-wise multiplication with another matrix
epow abstract fun epow(other:T):Matrix<T>
Element-wise exponentiation of each element in the matrixabstract infix fun epow(other:Int):Matrix<T>
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):Unit
Passes each col from left to right into a function.
forEachRow open fun forEachRow(f: (Matrix<T>) ->Unit):Unit
Passes each row from top to bottom into a function.
getBaseArray open fun getBaseArray():Any
getBaseMatrix abstract fun getBaseMatrix():Any
Returns 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).
getByte open fun getByte(vararg indices:Int):Byte
getCol abstract fun getCol(col:Int):Matrix<T>
getDouble abstract fun getDouble(i:Int, j:Int):Double
open fun getDouble(vararg indices:Int):Double
getDoubleData abstract fun getDoubleData():DoubleArray
Retrieves 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 abstract fun getFactory():MatrixFactory<Matrix<T>>
Because sometimes all you have is a Matrix, but you really want a MatrixFactory.
getFloat abstract fun getFloat(i:Int, j:Int):Float
open fun getFloat(vararg indices:Int):Float
getGeneric abstract fun getGeneric(i:Int, j:Int):T
open fun getGeneric(vararg indices:Int):T
getInt abstract fun getInt(i:Int, j:Int):Int
open fun getInt(vararg indices:Int):Int
getLinear open fun getLinear(index:Int):T
getLong open fun getLong(vararg indices:Int):Long
getRow abstract fun getRow(row:Int):Matrix<T>
getShort open fun getShort(vararg indices:Int):Short
inv abstract fun inv():Matrix<T>
Matrix inverse (square matrices)
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.
max abstract fun max():T
Maximum value contained in the matrix
mean abstract fun mean():T
Mean (average) of all the elements in the matrix.
min abstract fun min():T
Minimum value contained in the matrix
minus abstract operator fun minus(other:T):Matrix<T>
abstract operator fun minus(other:Matrix<T>):Matrix<T>
normF abstract fun normF():T
Frobenius normal of the matrix
normIndP1 abstract fun normIndP1():T
Induced, p=1 normal of the matrix. Equivalent of norm(matrix,1) in scipy.
numCols abstract fun numCols():Int
Number of columns in the matrix
numRows abstract fun numRows():Int
Number of rows in the matrix
pinv abstract fun pinv():Matrix<T>
Pseudo-inverse of (non-square) matrix
plus abstract operator fun plus(other:T):Matrix<T>
abstract operator fun plus(other:Matrix<T>):Matrix<T>
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 abstract fun setDouble(i:Int, j:Int, v:Double):Unit
open fun setDouble(vararg indices:Int, value:Double):Unit
setFloat abstract fun setFloat(i:Int, j:Int, v:Float):Unit
open fun setFloat(vararg indices:Int, value:Float):Unit
setGeneric abstract fun setGeneric(i:Int, j:Int, v:T):Unit
open fun setGeneric(vararg indices:Int, value:T):Unit
setInt abstract fun setInt(i:Int, j:Int, v:Int):Unit
open 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>
solve abstract fun solve(other:Matrix<T>):Matrix<T>
Solves 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 abstract operator fun times(other:Matrix<T>):Matrix<T>
abstract operator fun times(other:T):Matrix<T>
to2DArray open fun to2DArray():Array<DoubleArray>
Returns a Matrix as a double 2D array. Intended for MATLAB interop.
toIterable open fun toIterable():Iterable<T>
trace abstract fun trace():T
The matrix trace.
transpose abstract fun transpose():Matrix<T>
Transpose of the matrix
unaryMinus abstract operator fun unaryMinus():Matrix<T>
wrapRange open fun wrapRange(range:IntRange, max:Int):IntRange

Extension Functions

Name Summary
all fun <T>Matrix<T>.all(f: (T) ->Boolean):Boolean
Checks to see if all elements cause f to return true.
any fun <T>Matrix<T>.any(f: (T) ->Boolean):Boolean
Checks 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
fill fun <T>Matrix<T>.fill(f: (row:Int, col:Int) ->T):Matrix<T>
Fills the matrix with the values returned by the input function.fun <T>NDArray<T>.fill(f: (idx:IntArray) ->T):NDArray<T>
fillBoth fun <T>NDArray<T>.fillBoth(f: (nd:IntArray, linear:Int) ->T):NDArray<T>
fillLinear fun <T>NDArray<T>.fillLinear(f: (idx:Int) ->T):NDArray<T>
forEach fun <T>Matrix<T>.forEach(f: (T) ->Unit):Unit
Passes each element in row major order into a function.fun <T>NDArray<T>.forEach(f: (ele:T) ->Unit):Unit
Takes each element in a NDArray and passes them through f.
forEachIndexed fun <T>Matrix<T>.forEachIndexed(f: (row:Int, col:Int, ele:T) ->Unit):Unit
Passes each element in row major order into a function along with its index location.fun <T>NDArray<T>.forEachIndexed(f: (idx:Int, ele:T) ->Unit):Unit
Takes 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 fun <T>NDArray<T>.forEachIndexedN(f: (idx:IntArray, ele:T) ->Unit):Unit
Takes each element in a NDArray and passes them through f. Index given to f is the full ND index of the element.
get operator fun <T>Matrix<T>.get(i:Int, j:Int):T
operator fun <T>NDArray<T>.get(vararg indices:IntRange):NDArray<T>
operator fun <T>NDArray<T>.get(vararg indices:Int):Toperator fun <T>Matrix<T>.get(i:Int):T
Gets the ith element in the matrix. If 2D, selects elements in row-major order.operator fun <T>Matrix<T>.get(rows:IntRange, cols:IntRange):Matrix<T>
Allow slicing, e.g. matrix[1..2, 3..4]. 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 fun <T>Matrix<T>.get(rows:IntRange, cols:Int):Matrix<T>
Allows for slicing of the rows and selection of a single columnoperator fun <T>Matrix<T>.get(rows:Int, cols:IntRange):Matrix<T>
Allows for slicing of the cols and selection of a single row
linearToNIdx fun <T>NDArray<T>.linearToNIdx(linear:Int):IntArray
Given 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 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.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 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.
nIdxToLinear fun <T>NDArray<T>.nIdxToLinear(indices:IntArray):Int
Given a ND index into this array, find the corresponding 1D index in the raw underlying 1D storage array.
reshape fun <T>Matrix<T>.reshape(rows:Int, cols:Int):Matrix<T>
Returns a new Matrix with the given shape, populated with the data in this array.fun <T>NDArray<T>.reshape(vararg dims:Int):NDArray<T>
Returns a new NDArray with the given shape, populated with the data in this array.
safeNIdxToLinear fun <T>NDArray<T>.safeNIdxToLinear(indices:IntArray):Int
set operator fun <T>Matrix<T>.set(i:Int, v:T):Unit
Set the ith element in the matrix. If 2D, selects elements in row-major order.operator fun <T>Matrix<T>.set(i:Int, j:Int, v:T):Unit
operator fun <T>Matrix<T>.set(rows:IntRange, cols:IntRange, value:T):Unit
operator fun <T>Matrix<T>.set(rows:Int, cols:IntRange, value:T):Unit
operator fun <T>Matrix<T>.set(rows:IntRange, cols:Int, value:T):Unit
operator fun <T>NDArray<T>.set(vararg indices:Int, value:NDArray<T>):Unit
operator fun <T>NDArray<T>.set(vararg indices:Int, value:T):Unitoperator fun <T>Matrix<T>.set(rows:IntRange, cols:IntRange, value:Matrix<T>):Unit
Allow 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 fun <T>Matrix<T>.set(rows:Int, cols:IntRange, value:Matrix<T>):Unit
Allow 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 fun <T>Matrix<T>.set(rows:IntRange, cols:Int, value:Matrix<T>):Unit
Allow 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.
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.
widthOfDims fun <T>NDArray<T>.widthOfDims():ArrayList<Int>

Inheritors

Name Summary
DoubleMatrixBase abstract class DoubleMatrixBase :MatrixBase<Double>
Some functionality to help more easily implement double based koma backends. Feel free to not use if your backend has fast implementations of these functions.