bjonnh
05/17/2018, 10:10 PMfun MatrixStore<Double>.kroneckerProduct(x: MatrixStore<Double>, y: MatrixStore<Double>): MatrixStore<Double> {
val iMax = x.countRows()
val kMax = y.countRows()
val jMax = x.countColumns()
val lMax = y.countColumns()
val newRows = iMax * kMax
val newCols = jMax * lMax
val store = MatrixStore.PRIMITIVE.makeZero(newRows.toInt(), newCols.toInt()).copy()
var count:Long = 0
(0 until iMax).forEach { i ->
(0 until kMax).forEach { k ->
(0 until jMax).forEach { j ->
val xij = x.get(i,j)
(0 until lMax).forEach { l ->
store[count] = xij*y.get(k,l)
count++
}
}
}
}
return store.transpose()
}