20 lines
497 B
Standard ML
20 lines
497 B
Standard ML
structure Matrix = struct
|
|
local
|
|
open Array2
|
|
fun dot(x,y) = Vector.foldli (fn (i,xi,agg) => agg+xi*Vector.sub(y,i)) 0 x
|
|
in
|
|
val fromList = fromList
|
|
fun x*y = tabulate ColMajor (nRows x, nCols y, fn (i,j) => dot(row(x,i),column(y,j)))
|
|
(* for display *)
|
|
fun toList a =
|
|
List.tabulate(nRows a, fn i => List.tabulate(nCols a, fn j => sub(a,i,j)))
|
|
end
|
|
end;
|
|
(* example *)
|
|
let open Matrix
|
|
val m1 = fromList [[1,2],[3,4]]
|
|
val m2 = fromList [[~3,~8,3],[~2,1,4]]
|
|
in
|
|
toList (m1*m2)
|
|
end;
|