2个版本
0.0.2 | 2023年7月22日 |
---|---|
0.0.1 | 2023年7月13日 |
1479 在 数学 中
59KB
1K SLoC
Sciport-rs
Sciport是从流行的Python包Scipy移植的一组数学算法的集合
API设计
Sciport背后的主要理念是将SciPy的API表面进行更改,以更好地利用丰富的Rust类型系统。在决定保留原始函数签名还是重写它以更好地表示有效输入空间时,我们通常会决定更改它。
例如,这是SciPy的Butterworth滤波器API
scipy.signal.butter(N: int, Wn: array_like, btype: String, analog: bool, output: String, fs:
float)
Wn表示单个或一对频率,btype是滤波器的类型。然而,单个频率只对btype的一个子集有意义,一对频率也是如此。在我们的实现中,我们这样重写这个函数:
fn filter<T>(order: u32, band_filter: BandFilter, analog: Analog) { .. }
其中T代表滤波器的输出表示形式(Zpk,Ba,Sos),band_filter这样封装了原始的Wn和btype:
enum BandFilter
pub enum BandFilter {
Highpass(f64),
Lowpass(f64),
Bandpass { low: f64, high: f64 },
Bandstop { low: f64, high: f64 },
}
并且analog这样封装了analog和fs(因为采样率只在讨论数字滤波器时才有意义):
pub enum Analog {
True,
False {
fs: f64
}
}
模块
信号处理
信号处理工具箱目前包含一些滤波函数、有限的滤波器设计工具以及一些用于一维和二维数据的B样条插值算法。虽然B样条算法在技术上可以放在插值类别下,但它们被包括在这里,因为它们只与等间距数据一起使用,并且大量使用滤波理论和传递函数形式主义来提供快速的B样条变换。
特殊
本模块的主要功能是定义许多数学物理中的特殊函数。可用的函数包括airy、elliptic、bessel、gamma、beta、hypergeometric、parabolic cylinder、mathieu、spheroidal wave、struve和kelvin。
如果您想看到特定的模块或函数被开发,请提交一个pr,链接到该模块或函数的SciPy文档
依赖关系
~7–13MB
~162K SLoC