【问题标题】:F# converting Array2D to array of arraysF# 将 Array2D 转换为数组数组
【发布时间】:2016-06-15 17:47:43
【问题描述】:

在 F# 中是否有一种将 float[,] 转换为 float[][] 的简洁方法?如果这似乎是一件愚蠢的事情,那么我可以在生成的数组数组上使用 Array.zip。非常感谢任何帮助。

【问题讨论】:

  • Array2D to Array的可能重复
  • @Ringil:并不是真正的重复,因为二维数组在另一个问题中被展平了。

标签: multidimensional-array f#


【解决方案1】:

这应该可以解决问题:

module Array2D = 
    let toJagged<'a> (arr: 'a[,]) : 'a [][] = 
        [| for x in 0 .. Array2D.length1 arr - 1 do
               yield [| for y in 0 .. Array2D.length2 arr - 1 -> arr.[x, y] |]
            |]

【讨论】:

    【解决方案2】:

    请记住,Array2D 可以有一个非零基数。对于每个维度,我们可以使用一个初始化函数来获取它的基数和长度。这可能是一个局部范围的操作符:

    let toArray arr =
        let ($) (bas, len) f = Array.init len ((+) bas >> f)
        (Array2D.base1 arr, Array2D.length1 arr) $ fun x ->
            (Array2D.base2 arr, Array2D.length2 arr) $ fun y ->
                arr.[x, y]
    // val toArray : arr:'a [,] -> 'a [] []
    

    我看不出如何为Array.zip 的后续应用进行泛化,因为这意味着一维的长度为 2。

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多