Kronecker product: Difference between revisions

Content added Content deleted
m (tried to center the equal signs.)
No edit summary
Line 2,874: Line 2,874:
[0 0 0 1 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0]
[0 0 0 1 1 1 0 0 0]
[0 0 0 1 1 1 0 0 0]
</pre>

=={{header|Scala}}==
<lang scala> object KroneckerProduct
{

def getDimensions(matrix : Array[Array[Int]]) : (Int,Int) = {
val dimensions = matrix.map(x => x.size)
(dimensions.size, dimensions(0))
}

def kroneckerProduct(matrix1 : Array[Array[Int]], matrix2 : Array[Array[Int]]) : Array[Array[Int]] = {
val (r1,c1) = getDimensions(matrix1)
val (r2,c2) = getDimensions(matrix2)

val res = Array.ofDim[Int](r1*r2, c1*c2)

for(
i <- 0 until r1;
j <- 0 until c1;
k <- 0 until r2;
l <- 0 until c2
){
res(r2 * i + k)(c2 * j + l) = matrix1(i)(j) * matrix2(k)(l)
}

res
}

def main(args: Array[String]): Unit = {
val m1 = Array(Array(1, 2), Array(3, 4))
val m2 = Array(Array(0, 5), Array(6, 7))
println(kroneckerProduct(m1,m2).map(_.mkString("|")).mkString("\n"))

println("----------")

val m3 = Array(Array(0, 1, 0), Array(1, 1, 1), Array(0, 1, 0))
val m4 = Array(Array(1, 1, 1, 1), Array(1, 0, 0, 1), Array(1, 1, 1, 1))
println(kroneckerProduct(m3,m4).map(_.mkString("|")).mkString("\n"))
}

}

</lang>
{{out}}
<pre>
0|5|0|10
6|7|12|14
0|15|0|20
18|21|24|28
----------
0|0|0|0|1|1|1|1|0|0|0|0
0|0|0|0|1|0|0|1|0|0|0|0
0|0|0|0|1|1|1|1|0|0|0|0
1|1|1|1|1|1|1|1|1|1|1|1
1|0|0|1|1|0|0|1|1|0|0|1
1|1|1|1|1|1|1|1|1|1|1|1
0|0|0|0|1|1|1|1|0|0|0|0
0|0|0|0|1|0|0|1|0|0|0|0
0|0|0|0|1|1|1|1|0|0|0|0
</pre>
</pre>