2个版本

0.0.2 2023年7月22日
0.0.1 2023年7月13日

1479数学

MIT 许可证

59KB
1K SLoC

Maintenance crates-io api-docs

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