一般に、2 つの 2 次元配列を結合するにはどうすればよいですか?
私の仮定(明らかにこれを簡単にテストできます)は、常に同じ数の列があるということです:
let concatArrays (arr1:obj[,]) (arr2:obj[,]) =
([arr1; arr2]) |> Array2d.concat
ただし、この関数は存在しません。明確にするために、結果は長さ = 長さの合計で、元の arrays2D と同じ列数の 2 次元配列を生成する必要があり、入力と同じ型 (ここでは 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])
皆さんありがとう