Drop koma module, implement kmath-ejml module copying it, but for EJML SimpleMatrix #136
@ -36,7 +36,7 @@ public class EjmlMatrix(public val origin: SimpleMatrix, features: Set<MatrixFea
|
|||||||
Triple(
|
Triple(
|
||||||
EjmlMatrix(SimpleMatrix(ludecompositionF64.getRowPivot(null))),
|
EjmlMatrix(SimpleMatrix(ludecompositionF64.getRowPivot(null))),
|
||||||
EjmlMatrix(SimpleMatrix(ludecompositionF64.getLower(null))),
|
EjmlMatrix(SimpleMatrix(ludecompositionF64.getLower(null))),
|
||||||
EjmlMatrix(SimpleMatrix(ludecompositionF64.getUpper(null)))
|
EjmlMatrix(SimpleMatrix(ludecompositionF64.getUpper(null))),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ public class EjmlMatrix(public val origin: SimpleMatrix, features: Set<MatrixFea
|
|||||||
}
|
}
|
||||||
) union features.orEmpty()
|
) union features.orEmpty()
|
||||||
|
|
||||||
public override fun suggestFeature(vararg features: MatrixFeature): FeaturedMatrix<Double> =
|
public override fun suggestFeature(vararg features: MatrixFeature): EjmlMatrix =
|
||||||
EjmlMatrix(origin, this.features + features)
|
EjmlMatrix(origin, this.features + features)
|
||||||
|
|
||||||
public override operator fun get(i: Int, j: Int): Double = origin[i, j]
|
public override operator fun get(i: Int, j: Int): Double = origin[i, j]
|
||||||
|
@ -0,0 +1,75 @@
|
|||||||
|
package kscience.kmath.ejml
|
||||||
|
|
||||||
|
import kscience.kmath.linear.DeterminantFeature
|
||||||
|
import kscience.kmath.linear.LUPDecompositionFeature
|
||||||
|
import kscience.kmath.linear.MatrixFeature
|
||||||
|
import kscience.kmath.linear.getFeature
|
||||||
|
import org.ejml.dense.row.factory.DecompositionFactory_DDRM
|
||||||
|
import org.ejml.simple.SimpleMatrix
|
||||||
|
import kotlin.random.Random
|
||||||
|
import kotlin.random.asJavaRandom
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
internal class EjmlMatrixTest {
|
||||||
|
private val random = Random(0)
|
||||||
|
|
||||||
|
private val randomMatrix: SimpleMatrix
|
||||||
|
get() {
|
||||||
|
val s = random.nextInt(2, 100)
|
||||||
|
return SimpleMatrix.random_DDRM(s, s, 0.0, 10.0, random.asJavaRandom())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun rowNum() {
|
||||||
|
val m = randomMatrix
|
||||||
|
assertEquals(m.numRows(), EjmlMatrix(m).rowNum)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun colNum() {
|
||||||
|
val m = randomMatrix
|
||||||
|
assertEquals(m.numCols(), EjmlMatrix(m).rowNum)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun shape() {
|
||||||
|
val m = randomMatrix
|
||||||
|
val w = EjmlMatrix(m)
|
||||||
|
assertEquals(listOf(m.numRows(), m.numCols()), w.shape.toList())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun features() {
|
||||||
|
val m = randomMatrix
|
||||||
|
val w = EjmlMatrix(m)
|
||||||
|
val det = w.getFeature<DeterminantFeature<Double>>() ?: fail()
|
||||||
|
assertEquals(m.determinant(), det.determinant)
|
||||||
|
val lup = w.getFeature<LUPDecompositionFeature<Double>>() ?: fail()
|
||||||
|
|
||||||
|
val ludecompositionF64 = DecompositionFactory_DDRM.lu(m.numRows(), m.numCols())
|
||||||
|
.also { it.decompose(m.ddrm.copy()) }
|
||||||
|
|
||||||
|
assertEquals(EjmlMatrix(SimpleMatrix(ludecompositionF64.getLower(null))), lup.l)
|
||||||
|
assertEquals(EjmlMatrix(SimpleMatrix(ludecompositionF64.getUpper(null))), lup.u)
|
||||||
|
assertEquals(EjmlMatrix(SimpleMatrix(ludecompositionF64.getRowPivot(null))), lup.p)
|
||||||
|
}
|
||||||
|
|
||||||
|
private object SomeFeature : MatrixFeature {}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun suggestFeature() {
|
||||||
|
assertNotNull(EjmlMatrix(randomMatrix).suggestFeature(SomeFeature).getFeature<SomeFeature>())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun get() {
|
||||||
|
val m = randomMatrix
|
||||||
|
assertEquals(m[0, 0], EjmlMatrix(m)[0, 0])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun origin() {
|
||||||
|
val m = randomMatrix
|
||||||
|
assertSame(m, EjmlMatrix(m).origin)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package kscience.kmath.ejml
|
||||||
|
|
||||||
|
import org.ejml.simple.SimpleMatrix
|
||||||
|
import kotlin.random.Random
|
||||||
|
import kotlin.random.asJavaRandom
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertSame
|
||||||
|
|
||||||
|
internal class EjmlVectorTest {
|
||||||
|
private val random = Random(0)
|
||||||
|
|
||||||
|
private val randomMatrix: SimpleMatrix
|
||||||
|
get() = SimpleMatrix.random_DDRM(random.nextInt(2, 100), 1, 0.0, 10.0, random.asJavaRandom())
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun size() {
|
||||||
|
val m = randomMatrix
|
||||||
|
val w = EjmlVector(m)
|
||||||
|
assertEquals(m.numRows(), w.size)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun get() {
|
||||||
|
val m = randomMatrix
|
||||||
|
val w = EjmlVector(m)
|
||||||
|
assertEquals(m[0, 0], w[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun iterator() {
|
||||||
|
val m = randomMatrix
|
||||||
|
val w = EjmlVector(m)
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
m.iterator(true, 0, 0, m.numRows() - 1, 0).asSequence().toList(),
|
||||||
|
w.iterator().asSequence().toList()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun origin() {
|
||||||
|
val m = randomMatrix
|
||||||
|
val w = EjmlVector(m)
|
||||||
|
assertSame(m, w.origin)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user