Matrix multiplication: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: Another example) |
(Add Swift) |
||
Line 4,271: | Line 4,271: | ||
2 | 9 4 6 11 | |
2 | 9 4 6 11 | |
||
+---------------------+</lang> |
+---------------------+</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}}== |
=={{header|Tcl}}== |