Kronecker product: Difference between revisions
Content added Content deleted
No edit summary |
(Add Swift) |
||
Line 3,289: | Line 3,289: | ||
] |
] |
||
</pre> |
</pre> |
||
=={{header|Swift}}== |
|||
<lang swift>func kronecker(m1: [[Int]], m2: [[Int]]) -> [[Int]] { |
|||
let m = m1.count |
|||
let n = m1[0].count |
|||
let p = m2.count |
|||
let q = m2[0].count |
|||
let rtn = m * p |
|||
let ctn = n * q |
|||
var res = Array(repeating: Array(repeating: 0, count: ctn), count: rtn) |
|||
for i in 0..<m { |
|||
for j in 0..<n { |
|||
for k in 0..<p { |
|||
for l in 0..<q { |
|||
res[p * i + k][q * j + l] = m1[i][j] * m2[k][l] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
return res |
|||
} |
|||
func printMatrix<T>(_ matrix: [[T]]) { |
|||
guard !matrix.isEmpty else { |
|||
print() |
|||
return |
|||
} |
|||
let rows = matrix.count |
|||
let cols = matrix[0].count |
|||
for i in 0..<rows { |
|||
for j in 0..<cols { |
|||
print(matrix[i][j], terminator: " ") |
|||
} |
|||
print() |
|||
} |
|||
} |
|||
func printProducts(a: [[Int]], b: [[Int]]) { |
|||
print("Matrix A:") |
|||
printMatrix(a) |
|||
print("Matrix B:") |
|||
printMatrix(b) |
|||
print("kronecker a b:") |
|||
printMatrix(kronecker(m1: a, m2: b)) |
|||
print() |
|||
} |
|||
let a = [ |
|||
[1, 2], |
|||
[3, 4] |
|||
] |
|||
let b = [ |
|||
[0, 5], |
|||
[6, 7] |
|||
] |
|||
printProducts(a: a, b: b) |
|||
let a2 = [ |
|||
[0, 1, 0], |
|||
[1, 1, 1], |
|||
[0, 1, 0] |
|||
] |
|||
let b2 = [ |
|||
[1, 1, 1, 1], |
|||
[1, 0, 0, 1], |
|||
[1, 1, 1, 1] |
|||
] |
|||
printProducts(a: a2, b: b2)</lang> |
|||
{{out}} |
|||
<pre>Matrix A: |
|||
1 2 |
|||
3 4 |
|||
Matrix B: |
|||
0 5 |
|||
6 7 |
|||
kronecker a b: |
|||
0 5 0 10 |
|||
6 7 12 14 |
|||
0 15 0 20 |
|||
18 21 24 28 |
|||
Matrix A: |
|||
0 1 0 |
|||
1 1 1 |
|||
0 1 0 |
|||
Matrix B: |
|||
1 1 1 1 |
|||
1 0 0 1 |
|||
1 1 1 1 |
|||
kronecker a b: |
|||
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> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |