## norman

Implementations of different norms for elements of vector spaces

### 1 unstable release

 0.0.4 Sep 9, 2019

#8 in #metric

MIT/Apache

71KB
1K SLoC

# Norman

The norman library provides everything you need for calculationg norms of elements of vector spaces.

Based on two traits—`Norm` and `Distance` – this crate implements different kinds of norm and distance functions for a wide variety of types—including complex numbers and arrays.

These traits are mainly meant to facilitate generic implementations of numeric algorithms, where one often needs a grasp of how big a value is or how far two values are apart.

## Usage

Add this to your `Cargo.toml`:

``````[dependencies]
norman = "0.0.4"
``````

Then you can calculate the euclidean distance between two complex numbers:

``````use num_complex::Complex;

use norman::Distance;
use norman::desc::Abs;

assert_eq!(Complex::new(2.0, 5.0).distance(&Complex::new(-1.0, 1.0), Abs::new()), 5.0);
``````

or the supremum norm, 2-norm and 1-norm of a vector that is rerpesented by an ndarray:

``````use ndarray::Array1;

use norman::Norm;
use norman::desc::{Sup, PNorm};

let a = Array1::from(vec![2.0f32, -4.0, -2.0]);

assert_eq!(a.norm(Sup::new()), 4.0);
assert_eq!(a.norm(PNorm::new(2)), (2.0f32*2.0 + 4.0*4.0 + 2.0*2.0).sqrt());
assert_eq!(a.norm(PNorm::new(1)), 2.0f32 + 4.0 + 2.0);
``````

The minimum supported version of rustc is currently 1.34.2.

## Crate stability

The main reason why this crate is in pre-0.1-state is that I am not sure about the naming of several items, so it may still encounter some renames. I am particularly not very happy with the verbose name `norm_eucl` for “just calulate the usual standard norm“.

## Future development

The first step will be to support types representing usual vectors which are around in the ecosystem like:

Later I will maybe introduce some operator norms on matrices.

Furthermore, I might think about adding a new trait for derivatives of norms – in some algorithms, you do not only need to know the exact value of a norm, but also the derivative in order to know in which direction to go if you want to minimize the norm.