Jak ogólnie można połączyć dwie tablice 2d?Konkluzja macierzy 2D w f #
Moje założenie (Mógłbym oczywiście łatwo to sprawdzić) jest to, że zawsze mają taką samą liczbę kolumn:
let concatArrays (arr1:obj[,]) (arr2:obj[,]) =
([arr1; arr2]) |> Array2d.concat
Ta funkcja robi istnieje chociaż. Aby było jasne, wynik powinien dać tablicę 2d o długości = suma długości i tej samej liczbie kolumn co oryginalne tablice2D i powinna być tego samego typu co wejście, tutaj obj [,]. Oczywiście mogłem to zrobić w konstrukcji pętli, ale zastanawiałem się nad f # way. Dzięki.
Próbowałem to:
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])
Ale ta wraca z indeksu poza błędem bounds.
Aktualizacja ostatnim rzędzie:
Array2D.init (rows1+rows2) cls (fun i j -> if i < rows1 then arr1.[i,j] else arr2.[i,j])
Aktualizacja roztwór roboczy:
Array2D.init (rows1+rows2) cls (fun i j -> if i < rows1 then arr1.[i,j] else arr2.[i-rows1,j])
Dzięki wszystkim
[This] (http://stackoverflow.com/a/2367927/969613) może pomóc – JMK
Dzięki.Ale czy to nie łączy wielu macierzy 1d w jedną tablicę 2D? co chcę zrobić, to połączyć wiele tablic 2D w jedną tablicę 2d. Ale może dobry punkt wyjścia. Czy nie dostaję tego? – nik
Jeśli dobrze cię rozumiem, możesz po prostu użyć polecenia 'Array.append'. Jeśli się mylę, proszę podać przykładowy sygnał wejściowy i wyjściowy. – Tobber