我第一次在F#中使用Accord.NET,我在创建计算KNN距离的函数时遇到了问题。
这是我的代码
static member RunKNN =
let inputs = MachineLearningEngine.TrainingInputClass
let outputs = MachineLearningEngine.TrainingOutputClass
let knn = new KNearestNeighbors<int*int*int*int>(1,inputs,outputs,null)
let input = 1,1,1,1
knn.Compute(input)
当我为这样的函数换出null时
let distanceFunction = fun (a:int,b:int,c:int,d:int)
(e:int,f:int,g:int,h:int)
(i:float) ->
0
我得到这样的例外:
*错误1此表达式应具有类型 System.Func&lt;(int * int * int * int),(int * int * int * int),float&gt;但这里有类型 int * int * int * int - &gt; int * int * int * int - &gt;浮动 - &gt; INT *
到目前为止,我发现的唯一一篇与我的问题相关的文章是this。显然,F#和C#如何处理委托有问题?
我在Accord.NET here的Google小组上发布了同样的问题。
提前致谢
答案 0 :(得分:3)
声明距离函数如下:
let distanceFunction (a:int,b:int,c:int,d:int) (e:int,f:int,g:int,h:int) =
0.0
(它在输入中需要两个元组并返回一个浮点数),然后从中创建一个委托:
let distanceDelegate =
System.Func<(int * int * int * int),(int * int * int * int),float>(distanceFunction)
将此委托传递给Accord.NET应该可以解决问题。
答案 1 :(得分:0)
我猜你应该像这样使用元组形式
let distanceFunction = fun ((a:int,b:int,c:int,d:int),
(e:int,f:int,g:int,h:int),
(i:float)) ->