1个不稳定版本
0.0.4 | 2019年9月9日 |
---|
#526 在 科学
72KB
1K SLoC
Norman
Norman库提供了计算向量空间元素范数所需的一切。
基于两个特质—Norm
和 Distance
– 该包实现了多种类型的范数和距离函数,包括复数和数组等。
这些特质主要旨在方便泛型数值算法的实现,在这些算法中,人们通常需要了解值的“大小”或两个值之间的“距离”。
用法
将以下内容添加到您的 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”这样的冗长名称,它是用来“仅仅计算通常的标准范数”。
未来开发
第一步将是支持表示通常向量类型的类型,这些类型在生态系统中的如
-
来自 packed_simd 的simd类型
之后,我可能会引入矩阵的一些算子范数。
此外,我可能会考虑添加一个新的特质来表示范数的导数——在某些算法中,除了需要知道范数的确切值外,还需要知道导数,以便知道在哪个方向上移动才能最小化范数。
许可
Norman是在MIT许可和Apache许可(版本2.0)的条款下分发的。
有关详细信息,请参阅LICENSE-APACHE、LICENSE-MIT 和 COPYING。
除非您明确声明,否则您提交的任何有意包含在您的工作中的贡献,根据Apache-2.0许可的定义,将按上述方式双许可,而不附加任何额外条款或条件。
依赖项
~2MB
~35K SLoC