api / koma.ndarray / NDArray
NDArray
interface NDArray<T>
A general N-dimensional container for arbitrary types. For this container to be useful, you'll probably want to import koma.extensions.*, which includes e.g. element getter/setters which are non boxed for primitives.
If you are looking for a 2D container supporting linear algebra, please look at Matrix.
Properties
Name | Summary |
---|---|
size | open val size: Int |
Functions
Name | Summary |
---|---|
copy | abstract fun copy(): NDArray < T > |
getBaseArray | abstract fun getBaseArray(): Any |
getByte | open fun getByte(vararg indices: Int ): Byte open fun getByte(i: Int ): Byte |
getDouble | open fun getDouble(vararg indices: Int ): Double open fun getDouble(i: Int ): Double |
getFloat | open fun getFloat(vararg indices: Int ): Float open fun getFloat(i: Int ): Float |
getGeneric | open fun getGeneric(vararg indices: Int ): T abstract fun getGeneric(i: Int ): T |
getInt | open fun getInt(vararg indices: Int ): Int open fun getInt(i: Int ): Int |
getLinear | open fun ~~getLinear~~(index: Int ): T |
getLong | open fun getLong(vararg indices: Int ): Long open fun getLong(i: Int ): Long |
getShort | open fun getShort(vararg indices: Int ): Short open fun getShort(i: Int ): Short |
iterateIndices | open fun iterateIndices(): Iterable < IndexIterator > |
setByte | open fun setByte(vararg indices: Int , v: Byte ): Unit open fun setByte(i: Int , v: Byte ): Unit |
setDouble | open fun setDouble(vararg indices: Int , v: Double ): Unit open fun setDouble(i: Int , v: Double ): Unit |
setFloat | open fun setFloat(vararg indices: Int , v: Float ): Unit open fun setFloat(i: Int , v: Float ): Unit |
setGeneric | open fun setGeneric(vararg indices: Int , v: T ): Unit abstract fun setGeneric(i: Int , v: T ): Unit |
setInt | open fun setInt(vararg indices: Int , v: Int ): Unit open fun setInt(i: Int , v: Int ): Unit |
setLinear | open fun ~~setLinear~~(index: Int , value: T ): Unit |
setLong | open fun setLong(vararg indices: Int , v: Long ): Unit open fun setLong(i: Int , v: Long ): Unit |
setShort | open fun setShort(vararg indices: Int , v: Short ): Unit open fun setShort(i: Int , v: Short ): Unit |
shape | abstract fun shape(): List < Int > |
toIterable | open fun toIterable(): Iterable < T > |
toList | open fun toList(): List < T > Converts this NDArray into a one-dimensional List in row-major order. |
toMutableList | open fun toMutableList(): MutableList < T > Converts this NDArray into a one-dimensional MutableList in row-major order. |
Companion Object Properties
Name | Summary |
---|---|
byteFactory | var byteFactory: NumericalNDArrayFactory < Byte > |
doubleFactory | var doubleFactory: NumericalNDArrayFactory < Double > |
floatFactory | var floatFactory: NumericalNDArrayFactory < Float > |
intFactory | var intFactory: NumericalNDArrayFactory < Int > |
longFactory | var longFactory: NumericalNDArrayFactory < Long > |
shortFactory | var shortFactory: NumericalNDArrayFactory < Short > |
Companion Object Functions
Name | Summary |
---|---|
createGeneric | fun <T> createGeneric(vararg dims: Int , filler: ( IntArray ) -> T ): DefaultGenericNDArray < T > |
createGenericNulls | fun <T> createGenericNulls(vararg dims: Int ): DefaultGenericNDArray < T ?> |
invoke | operator fun <T> invoke(vararg dims: Int , filler: ( IntArray ) -> T ): NDArray < T > |
Extension Functions
Name | Summary |
---|---|
checkIndices | fun <T> NDArray < T >.checkIndices(indices: IntArray ): IntArray |
checkLinearIndex | fun <T> NDArray < T >.checkLinearIndex(index: Int ): Int |
div | operator fun NDArray < Byte >.div(other: Byte ): NDArray < Byte > operator fun NDArray < Double >.div(other: Double ): NDArray < Double > operator fun NDArray < Float >.div(other: Float ): NDArray < Float > operator fun NDArray < Int >.div(other: Int ): NDArray < Int > operator fun NDArray < Long >.div(other: Long ): NDArray < Long > operator fun NDArray < Short >.div(other: Short ): NDArray < Short > |
fill | fun NDArray < Byte >.fill(f: (idx: IntArray ) -> Byte ): NDArray < Byte > fun NDArray < Double >.fill(f: (idx: IntArray ) -> Double ): NDArray < Double > fun NDArray < Float >.fill(f: (idx: IntArray ) -> Float ): NDArray < Float > fun <T> NDArray < T >.fill(f: (idx: IntArray ) -> T ): NDArray < T > fun NDArray < Int >.fill(f: (idx: IntArray ) -> Int ): NDArray < Int > fun NDArray < Long >.fill(f: (idx: IntArray ) -> Long ): NDArray < Long > fun NDArray < Short >.fill(f: (idx: IntArray ) -> Short ): NDArray < Short > |
fillBoth | fun NDArray < Byte >.fillBoth(f: (nd: IntArray , linear: Int ) -> Byte ): NDArray < Byte > fun NDArray < Double >.fillBoth(f: (nd: IntArray , linear: Int ) -> Double ): NDArray < Double > fun NDArray < Float >.fillBoth(f: (nd: IntArray , linear: Int ) -> Float ): NDArray < Float > fun <T> NDArray < T >.fillBoth(f: (nd: IntArray , linear: Int ) -> T ): NDArray < T > fun NDArray < Int >.fillBoth(f: (nd: IntArray , linear: Int ) -> Int ): NDArray < Int > fun NDArray < Long >.fillBoth(f: (nd: IntArray , linear: Int ) -> Long ): NDArray < Long > fun NDArray < Short >.fillBoth(f: (nd: IntArray , linear: Int ) -> Short ): NDArray < Short > |
fillLinear | fun NDArray < Byte >.fillLinear(f: (idx: Int ) -> Byte ): NDArray < Byte > fun NDArray < Double >.fillLinear(f: (idx: Int ) -> Double ): NDArray < Double > fun NDArray < Float >.fillLinear(f: (idx: Int ) -> Float ): NDArray < Float > fun <T> NDArray < T >.fillLinear(f: (idx: Int ) -> T ): NDArray < T > fun NDArray < Int >.fillLinear(f: (idx: Int ) -> Int ): NDArray < Int > fun NDArray < Long >.fillLinear(f: (idx: Int ) -> Long ): NDArray < Long > fun NDArray < Short >.fillLinear(f: (idx: Int ) -> Short ): NDArray < Short > |
forEach | fun NDArray < Byte >.forEach(f: (ele: Byte ) -> Unit ): Unit fun NDArray < Double >.forEach(f: (ele: Double ) -> Unit ): Unit fun NDArray < Float >.forEach(f: (ele: Float ) -> Unit ): Unit fun <T> NDArray < T >.forEach(f: (ele: T ) -> Unit ): Unit fun NDArray < Int >.forEach(f: (ele: Int ) -> Unit ): Unit fun NDArray < Long >.forEach(f: (ele: Long ) -> Unit ): Unit fun NDArray < Short >.forEach(f: (ele: Short ) -> Unit ): Unit Takes each element in a NDArray and passes them through f. |
forEachIndexed | fun NDArray < Byte >.forEachIndexed(f: (idx: Int , ele: Byte ) -> Unit ): Unit fun NDArray < Double >.forEachIndexed(f: (idx: Int , ele: Double ) -> Unit ): Unit fun NDArray < Float >.forEachIndexed(f: (idx: Int , ele: Float ) -> Unit ): Unit fun <T> NDArray < T >.forEachIndexed(f: (idx: Int , ele: T ) -> Unit ): Unit fun NDArray < Int >.forEachIndexed(f: (idx: Int , ele: Int ) -> Unit ): Unit fun NDArray < Long >.forEachIndexed(f: (idx: Int , ele: Long ) -> Unit ): Unit fun NDArray < Short >.forEachIndexed(f: (idx: Int , ele: Short ) -> 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 NDArray < Byte >.forEachIndexedN(f: (idx: IntArray , ele: Byte ) -> Unit ): Unit fun NDArray < Double >.forEachIndexedN(f: (idx: IntArray , ele: Double ) -> Unit ): Unit fun NDArray < Float >.forEachIndexedN(f: (idx: IntArray , ele: Float ) -> Unit ): Unit fun <T> NDArray < T >.forEachIndexedN(f: (idx: IntArray , ele: T ) -> Unit ): Unit fun NDArray < Int >.forEachIndexedN(f: (idx: IntArray , ele: Int ) -> Unit ): Unit fun NDArray < Long >.forEachIndexedN(f: (idx: IntArray , ele: Long ) -> Unit ): Unit fun NDArray < Short >.forEachIndexedN(f: (idx: IntArray , ele: Short ) -> 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 NDArray < Byte >.get(vararg indices: IntRange ): NDArray < Byte > operator fun NDArray < Byte >.get(vararg indices: Int ): Byte operator fun NDArray < Double >.get(vararg indices: IntRange ): NDArray < Double > operator fun NDArray < Double >.get(vararg indices: Int ): Double operator fun NDArray < Float >.get(vararg indices: IntRange ): NDArray < Float > operator fun NDArray < Float >.get(vararg indices: Int ): Float operator fun <T> NDArray < T >.get(vararg indices: IntRange ): NDArray < T > operator fun <T> NDArray < T >.get(vararg indices: Int ): T operator fun NDArray < Int >.get(vararg indices: IntRange ): NDArray < Int > operator fun NDArray < Int >.get(vararg indices: Int ): Int operator fun NDArray < Long >.get(vararg indices: IntRange ): NDArray < Long > operator fun NDArray < Long >.get(vararg indices: Int ): Long operator fun NDArray < Short >.get(vararg indices: IntRange ): NDArray < Short > operator fun NDArray < Short >.get(vararg indices: Int ): Short |
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 NDArray < Byte >.map(f: ( Byte ) -> Byte ): NDArray < Byte > fun NDArray < Double >.map(f: ( Double ) -> Double ): NDArray < Double > fun NDArray < Float >.map(f: ( Float ) -> Float ): NDArray < Float > fun <T> NDArray < T >.map(f: ( T ) -> T ): DefaultGenericNDArray < T > fun NDArray < Int >.map(f: ( Int ) -> Int ): NDArray < Int > fun NDArray < Long >.map(f: ( Long ) -> Long ): NDArray < Long > fun NDArray < Short >.map(f: ( Short ) -> Short ): NDArray < Short > Takes each element in a NDArray, passes them through f, and puts the output of f into an output NDArray. |
mapIndexed | fun NDArray < Byte >.mapIndexed(f: (idx: Int , ele: Byte ) -> Byte ): NDArray < Byte > fun NDArray < Double >.mapIndexed(f: (idx: Int , ele: Double ) -> Double ): NDArray < Double > fun NDArray < Float >.mapIndexed(f: (idx: Int , ele: Float ) -> Float ): NDArray < Float > fun <T> NDArray < T >.mapIndexed(f: (idx: Int , ele: T ) -> T ): DefaultGenericNDArray < T > fun NDArray < Int >.mapIndexed(f: (idx: Int , ele: Int ) -> Int ): NDArray < Int > fun NDArray < Long >.mapIndexed(f: (idx: Int , ele: Long ) -> Long ): NDArray < Long > fun NDArray < Short >.mapIndexed(f: (idx: Int , ele: Short ) -> Short ): NDArray < Short > 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 NDArray < Byte >.mapIndexedN(f: (idx: IntArray , ele: Byte ) -> Byte ): NDArray < Byte > fun NDArray < Double >.mapIndexedN(f: (idx: IntArray , ele: Double ) -> Double ): NDArray < Double > fun NDArray < Float >.mapIndexedN(f: (idx: IntArray , ele: Float ) -> Float ): NDArray < Float > fun <T> NDArray < T >.mapIndexedN(f: (idx: IntArray , ele: T ) -> T ): NDArray < T > fun NDArray < Int >.mapIndexedN(f: (idx: IntArray , ele: Int ) -> Int ): NDArray < Int > fun NDArray < Long >.mapIndexedN(f: (idx: IntArray , ele: Long ) -> Long ): NDArray < Long > fun NDArray < Short >.mapIndexedN(f: (idx: IntArray , ele: Short ) -> Short ): NDArray < Short > 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 fun NDArray < Byte >.minus(other: Byte ): NDArray < Byte > operator fun NDArray < Byte >.minus(other: NDArray < Byte >): NDArray < Byte > operator fun NDArray < Double >.minus(other: Double ): NDArray < Double > operator fun NDArray < Double >.minus(other: NDArray < Double >): NDArray < Double > operator fun NDArray < Float >.minus(other: Float ): NDArray < Float > operator fun NDArray < Float >.minus(other: NDArray < Float >): NDArray < Float > operator fun NDArray < Int >.minus(other: Int ): NDArray < Int > operator fun NDArray < Int >.minus(other: NDArray < Int >): NDArray < Int > operator fun NDArray < Long >.minus(other: Long ): NDArray < Long > operator fun NDArray < Long >.minus(other: NDArray < Long >): NDArray < Long > operator fun NDArray < Short >.minus(other: Short ): NDArray < Short > operator fun NDArray < Short >.minus(other: NDArray < Short >): NDArray < Short > |
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. |
plus | operator fun NDArray < Byte >.plus(other: Byte ): NDArray < Byte > operator fun NDArray < Byte >.plus(other: NDArray < Byte >): NDArray < Byte > operator fun NDArray < Double >.plus(other: Double ): NDArray < Double > operator fun NDArray < Double >.plus(other: NDArray < Double >): NDArray < Double > operator fun NDArray < Float >.plus(other: Float ): NDArray < Float > operator fun NDArray < Float >.plus(other: NDArray < Float >): NDArray < Float > operator fun NDArray < Int >.plus(other: Int ): NDArray < Int > operator fun NDArray < Int >.plus(other: NDArray < Int >): NDArray < Int > operator fun NDArray < Long >.plus(other: Long ): NDArray < Long > operator fun NDArray < Long >.plus(other: NDArray < Long >): NDArray < Long > operator fun NDArray < Short >.plus(other: Short ): NDArray < Short > operator fun NDArray < Short >.plus(other: NDArray < Short >): NDArray < Short > |
pow | infix fun NDArray < Byte >.pow(exponent: Int ): NDArray < Byte > infix fun NDArray < Double >.pow(exponent: Int ): NDArray < Double > infix fun NDArray < Float >.pow(exponent: Int ): NDArray < Float > infix fun NDArray < Int >.pow(exponent: Int ): NDArray < Int > infix fun NDArray < Long >.pow(exponent: Int ): NDArray < Long > infix fun NDArray < Short >.pow(exponent: Int ): NDArray < Short > |
reshape | fun NDArray < Double >.reshape(rows: Int , cols: Int ): Matrix < Double > fun NDArray < Float >.reshape(rows: Int , cols: Int ): Matrix < Float > fun NDArray < Int >.reshape(rows: Int , cols: Int ): Matrix < Int > Returns a new Matrix with the given shape, populated with the data in this array. fun NDArray < Byte >.reshape(vararg dims: Int ): NDArray < Byte > fun NDArray < Double >.reshape(vararg dims: Int ): NDArray < Double > fun NDArray < Float >.reshape(vararg dims: Int ): NDArray < Float > fun <T> NDArray < T >.reshape(vararg dims: Int ): NDArray < T > fun NDArray < Int >.reshape(vararg dims: Int ): NDArray < Int > fun NDArray < Long >.reshape(vararg dims: Int ): NDArray < Long > fun NDArray < Short >.reshape(vararg dims: Int ): NDArray < Short > 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 NDArray < Byte >.set(vararg indices: Int , value: NDArray < Byte >): Unit operator fun NDArray < Byte >.set(vararg indices: Int , value: Byte ): Unit operator fun NDArray < Double >.set(vararg indices: Int , value: NDArray < Double >): Unit operator fun NDArray < Double >.set(vararg indices: Int , value: Double ): Unit operator fun NDArray < Float >.set(vararg indices: Int , value: NDArray < Float >): Unit operator fun NDArray < Float >.set(vararg indices: Int , value: Float ): 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 ): Unit operator fun NDArray < Int >.set(vararg indices: Int , value: NDArray < Int >): Unit operator fun NDArray < Int >.set(vararg indices: Int , value: Int ): Unit operator fun NDArray < Long >.set(vararg indices: Int , value: NDArray < Long >): Unit operator fun NDArray < Long >.set(vararg indices: Int , value: Long ): Unit operator fun NDArray < Short >.set(vararg indices: Int , value: NDArray < Short >): Unit operator fun NDArray < Short >.set(vararg indices: Int , value: Short ): Unit |
times | operator fun NDArray < Byte >.times(other: NDArray < Byte >): NDArray < Byte > operator fun NDArray < Byte >.times(other: Byte ): NDArray < Byte > operator fun NDArray < Double >.times(other: NDArray < Double >): NDArray < Double > operator fun NDArray < Double >.times(other: Double ): NDArray < Double > operator fun NDArray < Float >.times(other: NDArray < Float >): NDArray < Float > operator fun NDArray < Float >.times(other: Float ): NDArray < Float > operator fun NDArray < Int >.times(other: NDArray < Int >): NDArray < Int > operator fun NDArray < Int >.times(other: Int ): NDArray < Int > operator fun NDArray < Long >.times(other: NDArray < Long >): NDArray < Long > operator fun NDArray < Long >.times(other: Long ): NDArray < Long > operator fun NDArray < Short >.times(other: NDArray < Short >): NDArray < Short > operator fun NDArray < Short >.times(other: Short ): NDArray < Short > |
toByteArray | fun NDArray < Byte >.toByteArray(): ByteArray Converts this NDArray into a one-dimensional ByteArray in row-major order. |
toDoubleArray | fun NDArray < Double >.toDoubleArray(): DoubleArray Converts this NDArray into a one-dimensional DoubleArray in row-major order. |
toFloatArray | fun NDArray < Float >.toFloatArray(): FloatArray Converts this NDArray into a one-dimensional FloatArray in row-major order. |
toIntArray | fun NDArray < Int >.toIntArray(): IntArray Converts this NDArray into a one-dimensional IntArray in row-major order. |
toLongArray | fun NDArray < Long >.toLongArray(): LongArray Converts this NDArray into a one-dimensional LongArray in row-major order. |
toMatrix | fun NDArray < Double >.toMatrix(): Matrix < Double > fun NDArray < Float >.toMatrix(): Matrix < Float > fun NDArray < Int >.toMatrix(): Matrix < Int > |
toMatrixOrNull | fun <T> NDArray < T >.toMatrixOrNull(): Matrix < T >? |
toShortArray | fun NDArray < Short >.toShortArray(): ShortArray Converts this NDArray into a one-dimensional ShortArray in row-major order. |
toTypedArray | fun <T> NDArray < T >.toTypedArray(): Array < T > Converts this NDArray into a one-dimensional Array in row-major order. |
unaryMinus | operator fun NDArray < Byte >.unaryMinus(): NDArray < Byte > operator fun NDArray < Double >.unaryMinus(): NDArray < Double > operator fun NDArray < Float >.unaryMinus(): NDArray < Float > operator fun NDArray < Int >.unaryMinus(): NDArray < Int > operator fun NDArray < Long >.unaryMinus(): NDArray < Long > operator fun NDArray < Short >.unaryMinus(): NDArray < Short > |
widthOfDims | fun <T> NDArray < T >.widthOfDims(): ArrayList < Int > |
Inheritors
Name | Summary |
---|---|
DefaultByteNDArray | open class DefaultByteNDArray : NDArray < Byte > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
DefaultDoubleNDArray | open class DefaultDoubleNDArray : NDArray < Double > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
DefaultFloatNDArray | open class DefaultFloatNDArray : NDArray < Float > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
DefaultGenericNDArray | open class DefaultGenericNDArray<T> : NDArray < T > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
DefaultIntNDArray | open class DefaultIntNDArray : NDArray < Int > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
DefaultLongNDArray | open class DefaultLongNDArray : NDArray < Long > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
DefaultShortNDArray | open class DefaultShortNDArray : NDArray < Short > An (unoptimized) implementation of NDArray in pure Kotlin, for portability between the different platforms koma supports. |
Matrix | interface Matrix<T> : NDArray < T > A general facade for a Matrix type. Allows for various backend to be implemented to actually perform the computation. A koma backend must both implement this class and MatrixFactory. A matrix is guaranteed to be 2D and to have a numerical type. For storage of arbitrary types and dimensions, see koma.ndarray.NDArray. |
NumericalNDArray | interface ~~NumericalNDArray~~<T> : NDArray < T > An NDArray that holds a numerical type, such that math operations are available. |