From 50c32065b2b9875b12b97c94a2223069851de938 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Tue, 26 Mar 2013 13:41:30 +0100 Subject: [PATCH] FSharp: submatrix/subvector slice syntax setters --- src/FSharp/LinearAlgebra.fs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/FSharp/LinearAlgebra.fs b/src/FSharp/LinearAlgebra.fs index 366b8505..4462c2b5 100644 --- a/src/FSharp/LinearAlgebra.fs +++ b/src/FSharp/LinearAlgebra.fs @@ -4,7 +4,7 @@ // http://github.com/mathnet/mathnet-numerics // http://mathnetnumerics.codeplex.com // -// Copyright (c) 2009-2012 Math.NET +// Copyright (c) 2009-2013 Math.NET // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation @@ -50,6 +50,15 @@ module FSharpExtensions = let finish = defaultArg finish (x.Count - 1) x.SubVector(start, finish - start + 1) + /// Sets a slice of a vector starting at a specified index + /// and ending at a specified index (both indices are optional) + /// This method can be used via the x.[start .. finish] <- v syntax + member x.SetSlice(start, finish, values) = + let start = defaultArg start 0 + let finish = defaultArg finish (x.Count - 1) + x.SetSubVector(start, finish - start + 1, values) + + // A type extension for the generic matrix type that // adds the 'GetSlice' method to allow m.[r1 .. r2, c1 .. c2] syntax type MathNet.Numerics.LinearAlgebra.Generic. @@ -65,4 +74,14 @@ module FSharpExtensions = let rstart = defaultArg rstart 0 let cfinish = defaultArg cfinish (x.ColumnCount - 1) let rfinish = defaultArg rfinish (x.RowCount - 1) - x.SubMatrix(rstart, rfinish - rstart + 1, cstart, cfinish - cstart + 1) \ No newline at end of file + x.SubMatrix(rstart, rfinish - rstart + 1, cstart, cfinish - cstart + 1) + + /// Sets a submatrix using a specified column range and + /// row range (all indices are optional) + /// This method can be used via the x.[r1 .. r2, c1 .. c2 ] <- m syntax + member x.SetSlice(rstart, rfinish, cstart, cfinish, values) = + let cstart = defaultArg cstart 0 + let rstart = defaultArg rstart 0 + 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)