2 つの行列を乗算しようとしています。
この投稿から取得した転置を使用しています: F# マトリックスの転置関数について説明してください
let rec transpose = function
| (_::_)::_ as M -> List.map List.head M :: transpose (List.map List.tail M)
| _ -> []
また、2 つのリストのすべての要素を乗算してから追加する innerMult も使用しています。
let rec innerMult u v =
match u, v with
| [x], [y] -> x*y | u'::u, v'::v -> u'*v' + inner u v
したがって、これら 2 つの関数を使用して、行と列を乗算しようとします。もちろん、両方の行列が乗算が発生する条件を満たしていると仮定します。つまり、行は列と等しくなければなりません。
行列乗算コード:
let multiply (xs, ys) =
let tl = transpose ys in
let rec mMult xs =
match xs, tl with
| x::xs, t::tl -> inner x t
mMult xs;;
テスト: 乗算 ([[1;2;3];[4;5;6]], [[0;1];[3;2];[1;2]]);; 出力: > val it : int = 9
現時点では、実際に行列の乗算を行うために、再帰または List.map がありません。これを解決する方法がわかりません。