Matrix multiplication: Difference between revisions

Add Swift
(→‎{{header|Haskell}}: Another example)
(Add Swift)
Line 4,271:
2 | 9 4 6 11 |
+---------------------+</lang>
 
 
=={{header|Swift}}==
 
<lang swift>@inlinable
public func matrixMult<T: Numeric>(_ m1: [[T]], _ m2: [[T]]) -> [[T]] {
let n = m1[0].count
let m = m1.count
let p = m2[0].count
 
guard m != 0 else {
return [[]]
}
 
precondition(n == m2.count)
 
var ret = Array(repeating: Array(repeating: T.zero, count: p), count: m)
 
for i in 0..<m {
for j in 0..<p {
for k in 0..<n {
ret[i][j] += m1[i][k] * m2[k][j]
}
}
}
 
return ret
}
 
@inlinable
public 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()
}
}
 
let m1 = [
[6.5, 2, 3],
[4.5, 1, 5]
]
 
let m2 = [
[10.0, 16, 23, 50],
[12, -8, 16, -4],
[70, 60, -1, -2]
]
 
let m3 = matrixMult(m1, m2)
 
printMatrix(m3)</lang>
 
{{out}}
 
<pre>299.0 268.0 178.5 311.0
407.0 364.0 114.5 211.0 </pre>
 
=={{header|Tcl}}==