我一般如何组合两个二维数组?
我的假设(我显然可以很容易地对此进行测试)是它们总是具有相同数量的列:
let concatArrays (arr1:obj[,]) (arr2:obj[,]) =
([arr1; arr2]) |> Array2d.concat
虽然这个功能不存在。为了清楚起见,结果应该生成一个 2d 数组,其长度 = 长度之和,列数与原始 arrays2D 相同,并且应该与输入类型相同,此处为 obj[,]。我显然可以在循环结构中做到这一点,但我想知道一种 f# 方式。谢谢。
我试过这个:
let append2D (arr1:float[,]) (arr2:float[,]) =
let cls = arr1.GetLength 1
let rows1 = arr1.GetLength 0
let rows2 = arr2.GetLength 0
Array2D.init (rows1+rows2) cls (fun i j -> match i with | a when a <= rows1 -> arr1.[i,j] | _ -> arr2.[i,j])
但这会带来索引越界错误。
最后一行的更新:
Array2D.init (rows1+rows2) cls (fun i j -> if i < rows1 then arr1.[i,j] else arr2.[i,j])
更新工作解决方案:
Array2D.init (rows1+rows2) cls (fun i j -> if i < rows1 then arr1.[i,j] else arr2.[i-rows1,j])
谢谢大家