在 F# 中,float[] 和 float[][] 有什么区别,我如何初始化 float[][]?

In F# what is the difference between float[,] and float[][] and how do I initialise float[][]?

我用 F# 编写了一个使用 KMeans (http://accord-framework.net/docs/html/T_Accord_MachineLearning_KMeans.htm) 的函数。

一个名为 compute 的函数需要 float[][],但我从未在 F# 中见过它。只有浮动 [].

代码示例如下。

let ConverterForCluster =

我创建了一个 50 x 50 的基于零的数组。一旦我将其与 returns 一个浮点数 [] 的现有应用程序连接,这将被填充,目前我正试图到达编写一个从 [] 到 [][]

的转换器

我的距离数组声明为

    let mutable Distance = Array2D.zeroCreate 50 50

KMeans 是 Accord.NET 库中的一种方法(link 在顶部)。

    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 was unhandled Message: An unhandled exception of type 'System.NullReferenceException' occurred in Cluster.exe Additional information: Object reference not set to an instance of an object.

这个错误在下面一行

dm.[i].[j] <- Convert.ToDouble Distance.[i, j]

因为 dm 由于以下行而为空,因为我不知道如何初始化它

let dm : float[][] = Unchecked.defaultof<float[][]>

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

如果我从中遗漏了任何内容,请告诉我,或者如果它没有意义。谢谢。

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