#norm #distance #metrics #array #complex-numbers

norman

实现向量空间元素的多种范数

1个不稳定版本

0.0.4 2019年9月9日

#526科学

MIT/Apache

72KB
1K SLoC

Norman

Norman库提供了计算向量空间元素范数所需的一切。

基于两个特质—NormDistance – 该包实现了多种类型的范数和距离函数,包括复数和数组等。

这些特质主要旨在方便泛型数值算法的实现,在这些算法中,人们通常需要了解值的“大小”或两个值之间的“距离”。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
norman = "0.0.4"

然后您可以使用它计算两个复数之间的欧几里得距离

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);

或表示为数组的向量的最大范数、2-范数和1-范数

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);

目前支持的最小rustc版本为 1.34.2

包稳定性

该包处于预0.1状态的主要原因是我对几个项目的命名不确定,所以它可能还会遇到一些重命名。我特别不喜欢“norm_eucl”这样的冗长名称,它是用来“仅仅计算通常的标准范数”。

未来开发

第一步将是支持表示通常向量类型的类型,这些类型在生态系统中的如

之后,我可能会引入矩阵的一些算子范数。

此外,我可能会考虑添加一个新的特质来表示范数的导数——在某些算法中,除了需要知道范数的确切值外,还需要知道导数,以便知道在哪个方向上移动才能最小化范数。

许可

Norman是在MIT许可和Apache许可(版本2.0)的条款下分发的。

有关详细信息,请参阅LICENSE-APACHELICENSE-MITCOPYING

除非您明确声明,否则您提交的任何有意包含在您的工作中的贡献,根据Apache-2.0许可的定义,将按上述方式双许可,而不附加任何额外条款或条件。

依赖项

~2MB
~35K SLoC