【发布时间】:2016-03-24 13:05:30
【问题描述】:
我在 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 未处理 消息:未处理 'System.NullReferenceException' 类型的异常发生在 Cluster.exe 附加信息:对象引用未设置为 对象的实例。
这个错误在下面一行
dm.[i].[j] <- Convert.ToDouble Distance.[i, j]
因为 dm 是空的,因为我不知道如何初始化它,因为下面的行
let dm : float[][] = Unchecked.defaultof<float[][]>
我的问题是如何初始化这种类型的数组?又有什么区别呢?
如果我错过了这里的任何内容,请告诉我或者如果它没有意义。谢谢。
【问题讨论】:
-
简而言之,
float[,]是 multidimensional array,float[][]是 jagged array。 -
T[][] 只是一个数组数组,因为 T[,] 实际上是一个一维数组。
-
我投票决定以重复的形式结束,因为这两个问题都在另一个问题中得到了回答。答案有什么不同,如何初始化在 F# WikiBooks 链接中回答。您可以自己将此问题标记为重复,这将立即更改其状态。 :)
-
@Guy Coder,或者只是删除,对吧?
-
@FoggyFinder 他可以删除它,但有时将它们标记为重复就像留下面包屑让其他人找到原始答案的方式。对于这个,我会说把它留在这里并标记为重复,因为它有原始问题中没有的附加信息。
标签: arrays multidimensional-array f# jagged-arrays f#-4.0