Chris@10: module fmatrix; Chris@5: Chris@18: // Basic matrices using primitive array of double as each row Chris@18: Chris@10: vec = load fvector; Chris@9: Chris@10: zeroMatrix rows cols = array (map \(vec.zeros cols) [1..rows]); Chris@5: Chris@20: generate f rows cols = Chris@5: (m = zeroMatrix rows cols; Chris@5: for [0..rows-1] do row: Chris@5: for [0..cols-1] do col: Chris@9: m[row][col] := f row col; Chris@5: done; Chris@5: done; Chris@5: m); Chris@5: Chris@20: constMatrix n = generate do row col: n done; Chris@20: randomMatrix = generate do row col: Math#random() done; Chris@5: identityMatrix = constMatrix 1; Chris@5: Chris@20: width m = if length m > 0 then vec.length m[0] else 0 fi; Chris@6: cols = width; Chris@6: Chris@5: height m = length m; Chris@6: rows = height; Chris@6: Chris@5: dimensions m = { cols = width m, rows = height m }; Chris@5: Chris@20: copyOf m = array (map vec.copyOf m); Chris@9: Chris@6: transposed m is array<~double[]> -> array<~double[]> = Chris@20: generate do row col: m[col][row] done (cols m) (rows m); Chris@8: Chris@5: { Chris@20: generate, constMatrix, randomMatrix, zeroMatrix, identityMatrix, Chris@6: width, cols, height, rows, dimensions, Chris@20: copyOf, Chris@15: transposed, Chris@5: } Chris@5: