When extracting 1D partitions from 2D arrays, I find it convenient to use Seq.Cast<T>. This gives elements from a 2D array in left-right / top-bottom order.
Like this:
let A = array2D [[1;2;3];[4;5;6];[7;8;9]]
let flatten (A:'a[,]) = A |> Seq.cast<'a>
let getColumn c (A:_[,]) =
flatten A.[*,c..c] |> Seq.toArray
let getRow r (A:_[,]) =
flatten A.[r..r,*] |> Seq.toArray
And an example in FSI:
> flatten A;;
val it : seq<int> = seq [1; 2; 3; 4; ...]
> getRow 2 A;;
val it : int array = [|7; 8; 9|]
> getColumn 0 A;;
val it : int array = [|1; 4; 7|]
source
share