Semagle.Framework


Semagle.Numerics.Vectors Library

The library provides two DenseVector and SparseVector with corresponding operations, which are commonly used in machine learning applications.

Creating Vectors

DenseVector is constructed from the array of float32 values. This type of vector stores zero and non-zero values and suits well for feature vectors with many non-zero elements.

1: 
2: 
open Semagle.Numerics.Vector
let a = DenseVector([| 1.0f; 3.0f; -3.0f; 4.0f; 8.0f |])

SparseVector is constructed from the array of int indices of non-zero elements and the array of float32 values of non-zero elements. This type of vector suits well for feature vectors with a few non-zero elements.

1: 
2: 
open Semagle.Numerics.Vector
let a = SparseVector([|0; 1; 3; 5|], [|1.0f; -2.0f; 4.0f; -6.0f|])

Operations

Indexing and Slicing

DenseVector and SparseVector support indexing and slicing operations, but implementations of SparseVector operations are more expensive because they require binary search for finding item indeces.

1: 
2: 
3: 
4: 
a.[1]
a.[1..3]
a.[..3]
a.[2..]

Element-wise Operations

DenseVector and SparseVector support element wise addition, subtraction, multiplication and division.

1: 
2: 
3: 
4: 
a + b
a - b
a * b
a / b 

Negation and Multiplication/Division by Scalar

DenseVector and SparseVector support unary negation and multiplication/division by scalar.

1: 
2: 
3: 
-a
a * 1.5f
a / 2.0f

Dot/Inner Product

Dot product is a key operation of many machine learning algoritms and DenseVector and SparseVector provide the effective implementations of this operation.

1: 
a .* b
val a : obj
val a : float32
Fork me on GitHub