Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#矩阵乘法_F#_Matrix Multiplication - Fatal编程技术网

F#矩阵乘法

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) =

我想把两个矩阵相乘

我使用的是这篇文章中的转置:

我还使用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,因此它实际上执行矩阵乘法。我只是不知道怎么解决这个问题

看来这应该行得通:

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