1

MathNet.Numerics.LinearAlgebra用来建立一个图书馆。我需要将用户指定的函数应用于矩阵的每个元素,我知道我可以使用Map

open System
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.LinearAlgebra.Double

let m1 = matrix [[1.0; 2.0; 3.0]]
let f1 = fun s -> s * 3.14
let m2 = m1.Map f1 // THIS FAILS
let m3 = m1.Map (fun s -> s * 3.14) // THIS WORKS!

m2我收到以下错误的行中:

This expression was expected to have type Func<float, 'a> but here has type double -> double

但我需要能够传入映射函数,而不是像 for 那样内联定义它m3。的文档MathNet.Numerics似乎没有回答我的问题。

4

2 回答 2

5

F# 扩展(MathNet.Numerics.FSharp 包)通常提供可以处理普通 F# 函数的变体。在这种情况下,您可以编写:

let m2 = m1 |> Matrix.map f1
于 2015-04-30T10:05:27.953 回答
4

您可以像这样构造委托:

let m2 = m1.Map (Func<_, _> f1)

F# 在某些情况下隐式构造委托,如问题中的 lambda 所示,但它并不总是无缝的。有关其他信息,请参阅F# 中的委托的 MSDN 页面。

于 2015-04-30T08:50:59.270 回答