All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.space.kscience.kmath.linear.MatrixBuilder.kt Maven / Gradle / Ivy

package space.kscience.kmath.linear

import space.kscience.kmath.nd.Structure2D
import space.kscience.kmath.structures.Buffer
import space.kscience.kmath.structures.BufferFactory
import space.kscience.kmath.structures.asBuffer

public class MatrixBuilder(public val rows: Int, public val columns: Int) {
    public operator fun  invoke(vararg elements: T): Matrix {
        require(rows * columns == elements.size) { "The number of elements ${elements.size} is not equal $rows * $columns" }
        val buffer = elements.asBuffer()
        return BufferMatrix(rows, columns, buffer)
    }

    //TODO add specific matrix builder functions like diagonal, etc
}

public fun Structure2D.Companion.build(rows: Int, columns: Int): MatrixBuilder = MatrixBuilder(rows, columns)

public fun  Structure2D.Companion.row(vararg values: T): Matrix {
    val buffer = values.asBuffer()
    return BufferMatrix(1, values.size, buffer)
}

public inline fun  Structure2D.Companion.row(
    size: Int,
    factory: BufferFactory = Buffer.Companion::auto,
    noinline builder: (Int) -> T,
): Matrix {
    val buffer = factory(size, builder)
    return BufferMatrix(1, size, buffer)
}

public fun  Structure2D.Companion.column(vararg values: T): Matrix {
    val buffer = values.asBuffer()
    return BufferMatrix(values.size, 1, buffer)
}

public inline fun  Structure2D.Companion.column(
    size: Int,
    factory: BufferFactory = Buffer.Companion::auto,
    noinline builder: (Int) -> T,
): Matrix {
    val buffer = factory(size, builder)
    return BufferMatrix(size, 1, buffer)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy