如何一般性地合并两个二维数组?
我假设(显然可以轻松测试)它们总是具有相同的列数:
let concatArrays (arr1:obj[,]) (arr2:obj[,]) =
([arr1; arr2]) |> Array2d.concat
这个函数实际上不存在。需要明确的是,结果应该产生一个二维数组,长度等于长度总和,列数与原始2D数组相同,并且应该与输入类型相同,即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])
感谢大家。
Array.append
。如果我理解错误,请提供一个输入和输出的示例。 - Tobber<
代替<=
,或者更简洁地写成:if i < rows1 then arr1.[i,j] else arr2.[i,j]
- Tobberarr2.[i,j]
应该改为arr2.[i-rows1,j]
:) - Tobber