我正在尝试将两个矩阵相乘。
我正在使用取自这篇文章的转置:帮我解释 F# 矩阵转置函数
let rec transpose = function
| (_::_)::_ as M -> List.map List.head M :: transpose (List.map List.tail M)
| _ -> []
我还使用了 innerMult ,它将两个列表的每个元素相乘,然后将它们相加。
let rec innerMult u v =
match u, v with
| [x], [y] -> x*y | u'::u, v'::v -> u'*v' + inner u v
所以使用这两个函数我会尝试将行乘以列。当然,我假设两个矩阵都满足乘法发生的条件。也就是说,行必须等于列。
矩阵乘法代码:
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 ,因此它实际上进行了矩阵乘法。我只是不知道如何解决这个问题。