Perform matrix multiplication of a real matrix a with nx rows and ny columns, a real matrix b with ny rows and nz columns and assign the value to a real matrix c with nx rows and nz columns.
(defn t [x] (apply (partial mapv vector) x))
(defn v* [u v] (reduce + (mapv * u v)))
(defn shape [a] (comp (partition-all (count a)) (map vec)))
(defn mm [a b]
(into [] (shape a)
(for [line a col (t b)]
(v* line col))))
(def c (mm a b))
(require '[clojure.core.matrix :refer [mmul]])
(def c (mmul a b))
c = matmul (a,b)
uses typ, omv;
var
A: array[1..m, 1..n] of ArbFloat;
B: array[1..n, 1..p] of ArbFloat;
C: array[1..m, 1..p] of ArbFloat;
...
omvmmm(
A[1,1], m, n, n,
B[1,1], p, p,
C[1,1], p
);
var
A: array[1..m, 1..n] of ArbFloat;
B: array[1..n, 1..p] of ArbFloat;
C: array[1..m, 1..p] of ArbFloat;
...
omvmmm(
A[1,1], m, n, n,
B[1,1], p, p,
C[1,1], p
);