From e106872e7324f79e5abf5a249e8e1fe5d51d5cce Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Sun, 30 Jun 2013 14:15:42 +0200 Subject: [PATCH] FSharp: support new F#3.1 slicing getters on matrices (setters prepared as well) --- src/FSharp/LinearAlgebra.fs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/FSharp/LinearAlgebra.fs b/src/FSharp/LinearAlgebra.fs index 4462c2b5..ce12ce3b 100644 --- a/src/FSharp/LinearAlgebra.fs +++ b/src/FSharp/LinearAlgebra.fs @@ -85,3 +85,31 @@ module FSharpExtensions = let cfinish = defaultArg cfinish (x.ColumnCount - 1) let rfinish = defaultArg rfinish (x.RowCount - 1) x.SetSubMatrix(rstart, rfinish - rstart + 1, cstart, cfinish - cstart + 1, values) + + /// Gets a row subvector using a specified row index and column range. + /// This method can be used via the x.[r, c1 .. c2] syntax (F#3.1) + member x.GetSlice(r, cstart, cfinish) = + let cstart = defaultArg cstart 0 + let cfinish = defaultArg cfinish (x.ColumnCount - 1) + x.Row(r, cstart, cfinish - cstart + 1) + + /// Gets a column subvector using a specified row index and column range. + /// This method can be used via the x.[r, c1 .. c2] syntax (F#3.1) + member x.GetSlice(rstart, rfinish, c) = + let rstart = defaultArg rstart 0 + let rfinish = defaultArg rfinish (x.RowCount - 1) + x.Column(c, rstart, rfinish - rstart + 1) + +// /// Sets a row subvector using a specified row index and column range. +// /// This method can be used via the x.[r, c1 .. c2] <- v syntax (F#3.1) +// member x.GetSlice(r, cstart, cfinish, values) = +// let cstart = defaultArg cstart 0 +// let cfinish = defaultArg cfinish (x.ColumnCount - 1) +// x.SetRow(r, cstart, cfinish - cstart + 1, values) +// +// /// Sets a column subvector using a specified row index and column range. +// /// This method can be used via the x.[r, c1 .. c2] <- v syntax (F#3.1) +// member x.GetSlice(rstart, rfinish, c, values) = +// let rstart = defaultArg rstart 0 +// let rfinish = defaultArg rfinish (x.RowCount - 1) +// x.SetColumn(c, rstart, rfinish - rstart + 1, values)