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

Arrays 在F#中,float[,]和float[][]之间有什么区别?如何初始化float[]]?,arrays,multidimensional-array,f#,jagged-arrays,f#-4.0,Arrays,Multidimensional Array,F#,Jagged Arrays,F# 4.0,我用F#编写了一个函数,它使用KMeans() 一个名为compute的函数需要float[]],但我在F#中从未见过这种情况。仅浮动[,] 下面是代码示例 let ConverterForCluster = 我创建了一个50 x 50的零基数组。在我尝试编写从[,]到[][]的转换器时,一旦我将其与返回浮点值[,]的现有应用程序进行接口,就会填充它 我的距离数组声明为 let mutable Distance = Array2D.zeroCreate 50 50 KMeans是来自

我用F#编写了一个函数,它使用KMeans()

一个名为compute的函数需要float[]],但我在F#中从未见过这种情况。仅浮动[,]

下面是代码示例

let ConverterForCluster =
我创建了一个50 x 50的零基数组。在我尝试编写从[,]到[][]的转换器时,一旦我将其与返回浮点值[,]的现有应用程序进行接口,就会填充它

我的距离数组声明为

    let mutable Distance = Array2D.zeroCreate 50 50
KMeans是来自Accord.NET库(顶部链接)的方法

我正在创建一个名为dm的新变量,以便km(以下)的函数Compute可以接受它。但是,使用Unchecked.defaultof会创建一个空数组,这就是错误所在

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

    for i = 0 to 49 do
        for j = 0 to 49 do
例外情况是:

System.NullReferenceException未处理消息:未处理 中发生“System.NullReferenceException”类型的异常 Cluster.exe其他信息:对象引用未设置为 对象的实例

此错误位于下一行

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

dm.[i].[j]简而言之,
float[,]
是a,
float[].[].
是a.T[]只是一个数组数组,因为T[,]实际上是一个一维数组。我投票以重复的形式结束,因为这两个问题在另一个问题中都得到了回答。答案有什么不同,如何初始化在F#WikiBooks链接中有答案。您可以将此问题标记为您自己的副本,这将立即更改其状态。:)@盖伊编码,或者干脆删除,对吗?@FoggyFinder他可以删除它,但有时将它们标记为重复,就像将面包屑留给其他人找到原始答案一样。对于这个问题,我会说将它留在这里并标记为重复,因为它有在原始问题中找不到的附加信息。虽然此代码可能会回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码答案没有用处。请尝试扩展答案;)如果你不知道你可以在有时间的时候给我加ping,你的意思是“FoggyFinder加代码吗?不仅仅是代码”。为帮助您找到答案的来源添加链接将非常有用。一般来说,要扩展它。当你有时间的时候,在聊天中打个电话给我:这样会更快。
    dm.[i].[j] <- Convert.ToDouble Distance.[i, j]
    let label = km.Compute(dm)

    label
dm.[i].[j] <- Convert.ToDouble Distance.[i, j]
let dm : float[][] = Unchecked.defaultof<float[][]>
let dm : float[][] = [| for a in 0 .. 49 do yield [| 0.0 .. 49.0 |] |]