【发布时间】:2013-06-02 18:52:12
【问题描述】:
我正在尝试将两个矩阵相乘。
我正在使用取自这篇文章的转置:Help me to explain the F# Matrix transpose function
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]]);;输出:> 验证它:int = 9
目前它缺少递归或 List.map,因此它实际上进行了矩阵乘法。我只是不知道如何解决这个问题。
【问题讨论】:
-
如果您做任何需要良好性能的事情,您可能想要使用 math.net。然而,这有一个入门成本。技术计算有它的小规则..