我在F#中编写了一个使用KMeans(http://accord-framework.net/docs/html/T_Accord_MachineLearning_KMeans.htm)的函数。
一个名为compute的函数需要float [] []但我在F#中从未见过。只浮[,]。
代码示例如下。
let ConverterForCluster =
我创建了一个50 x 50的基于零的数组。一旦我将此接口与现有的返回浮动[,]的应用程序进行交互,我将尝试从此处编写转换器。 [,]到[] []
我的距离数组声明为
let mutable Distance = Array2D.zeroCreate 50 50
KMeans是来自Accord.NET库的方法(顶部链接)。
let km = KMeans(5)
我正在创建一个名为dm的新变量,以便km(下面)的函数Compute可以接受它。但是,使用Unchecked.defaultof会创建一个错误的空数组
let dm : float[][] = Unchecked.defaultof<float[][]>
for i = 0 to 49 do
for j = 0 to 49 do
我相信从float [,]到float [] []的转换很好,但我还没有初始化dm所以我无法确认100%
dm.[i].[j] <- Convert.ToDouble Distance.[i, j]
这是需要float [] []并且不接受[,]
的函数 let label = km.Compute(dm)
label
例外是:
System.NullReferenceException未处理消息:未处理 类型&#39; System.NullReferenceException&#39;的异常发生在 Cluster.exe附加信息:对象引用未设置为 对象的实例。
此错误位于以下行
dm.[i].[j] <- Convert.ToDouble Distance.[i, j]
因为dm因为下面的行而为空,因为我不知道如何初始化它
let dm : float[][] = Unchecked.defaultof<float[][]>
我的问题是如何初始化这种类型的数组?有什么区别?
如果我错过了任何相关内容,请告诉我或者它是否有意义。感谢。
答案 0 :(得分:-3)
let dm : float[][] = [| for a in 0 .. 49 do yield [| 0.0 .. 49.0 |] |]