9 people like it.

Slicing for Math.Net vectors and matrices

This snippet adds the 'GetSlice' operation to Math.Net vector and matrix types. This makes it possible to get sub-vectors and sub-matrices using the convenient syntax (For vectors 'vect.[start .. end]` or 'vect.[start ..]' and for matrices 'mat.[r1 .. r2, c1 .. c2]' and similar).

 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
// Open Math.NET namespaces (you need MathNet.Numerics package)
open MathNet.Numerics
open MathNet.Numerics.FSharp
open MathNet.Numerics.LinearAlgebra.Double

// Define type extension ofr the generic vector type 
// (Here we need to repeat all constraints, so it is a bit ugly)
type MathNet.Numerics.LinearAlgebra.Generic.
    Vector<'T when 'T : struct and 'T : (new : unit -> 'T) 
               and 'T :> System.IEquatable<'T> and 'T :> System.IFormattable 
               and 'T :> System.ValueType> with
  /// Implements slicing of vector - both arguments are option types
  member x.GetSlice(start, finish) = 
    let start = defaultArg start 0
    let finish = defaultArg finish (x.Count - 1)
    x.SubVector(start, finish - start + 1)

// Example: Get some slices from a vector
let v = vector [ 1.0; 2.0; 3.0 ]
v.[0 .. 1] // elements [1.0; 2.0]
v.[1 ..]   // elements [2.0; 3.0]
v.[.. 1]   // elements [1.0; 2.0]
namespace MathNet
namespace MathNet.Numerics
namespace Microsoft.FSharp
namespace MathNet.Numerics.LinearAlgebra
namespace MathNet.Numerics.LinearAlgebra.Double
type Vector =
  inherit Vector<float>
  member AbsoluteMaximum : unit -> float
  member AbsoluteMaximumIndex : unit -> int
  member AbsoluteMinimum : unit -> float
  member AbsoluteMinimumIndex : unit -> int
  member CoerceZero : threshold:float -> unit
  member InfinityNorm : unit -> float
  member L1Norm : unit -> float
  member L2Norm : unit -> float
  member MaximumIndex : unit -> int
  member MinimumIndex : unit -> int
  ...

Full name: MathNet.Numerics.LinearAlgebra.Double.Vector
type unit = Unit

Full name: Microsoft.FSharp.Core.unit
namespace System
type IEquatable<'T> =
  member Equals : other:'T -> bool

Full name: System.IEquatable<_>
type IFormattable =
  member ToString : format:string * formatProvider:IFormatProvider -> string

Full name: System.IFormattable
type ValueType =
  member Equals : obj:obj -> bool
  member GetHashCode : unit -> int
  member ToString : unit -> string

Full name: System.ValueType
val defaultArg : arg:'T option -> defaultValue:'T -> 'T

Full name: Microsoft.FSharp.Core.Operators.defaultArg
val v : obj

Full name: Script.v
Next Version Raw view Test code New version

More information

Link:http://fssnip.net/dQ
Posted:9 years ago
Author:Tomas Petricek
Tags: math , mathnet , vector , getslice , matrix