在F#中,float [,]和float [] []之间的区别是什么?如何初始化float [] []?

时间:2016-03-24 13:05:30

标签: arrays multidimensional-array f# jagged-arrays f#-4.0

我在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[][]>

我的问题是如何初始化这种类型的数组?有什么区别?

如果我错过了任何相关内容,请告诉我或者它是否有意义。感谢。

1 个答案:

答案 0 :(得分:-3)

let dm : float[][] = [| for a in 0 .. 49 do yield [| 0.0 .. 49.0 |] |]