F#矩阵乘法
我想把两个矩阵相乘 我使用的是这篇文章中的转置: 我还使用innerMult,它将两个列表中的每个元素相乘,然后将它们相加F#矩阵乘法,f#,matrix-multiplication,F#,Matrix Multiplication,我想把两个矩阵相乘 我使用的是这篇文章中的转置: 我还使用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 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,因此它实际上执行矩阵乘法。我只是不知道怎么解决这个问题 看来这应该行得通:
let multiply xs ys =
[for row in xs ->
[for col in transpose ys -> inner row col]]
看来这应该行得通:
let multiply xs ys =
[for row in xs ->
[for col in transpose ys -> inner row col]]
如果您做任何需要良好性能的事情,可能需要使用math.net。然而,这有一个入门成本。技术计算有它的小规则。如果你做任何需要良好性能的事情,你可能想使用math.net。然而,这有一个入门成本。技术计算有它的小规则。我可以不用for循环吗?我认为for循环最清晰,但是如果你愿意,你可以用
someList>List.map(fun variable->body)
替换[for variable in someList->body]
?xs |>List.map(transpose ys->(internal xs ys))不,您需要替换这两种列表理解:让我们乘xs ys=xs |>List.map(fun row->transpose ys |>List.map(fun col->internal row col))
不是严格必要的,但在某些情况下可以帮助进行类型推断x |>f
的结果与fx
相同,因此您可以只编写让x乘ys=List.map(fun row->List.map(fun col->internal row col)(transpose ys))xs
。我能在没有for循环的情况下执行吗?我认为for循环最清晰,但您总是可以替换[for variable in someList->body]
使用someList |>List.map(有趣的变量->body)
如果您愿意的话。像这样吗?xs |>List.map(transpose ys->(internal xs ys))不,您需要替换这两种列表理解:让我们乘xs ys=xs |>List.map(fun row->transpose ys |>List.map(fun col->internal row col))
不是严格必要的,但在某些情况下可以帮助进行类型推断x |>f
的结果与fx
相同,因此您可以只编写let multiply xs ys=List.map(fun row->List.map(fun col->inner row col)(transpose ys))xs
。