1 unstable release
0.0.4  Sep 9, 2019 

#8 in #metric
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, 2norm and 1norm 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 pre0.1state 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:

simd types from packed_simd
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.
License
Norman is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSEAPACHE and LICENSEMIT, and COPYING for details.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~1.5MB
~31K SLoC