SciRS2: Scientific Computing in Rust
SciRS2 is a comprehensive scientific computing library for Rust, inspired by SciPy and designed to provide a complete ecosystem for numerical computation, statistical analysis, and scientific algorithms.
Overview
This is the main SciRS2 crate, which provides a convenient facade over the ecosystem of specialized sub-crates. Each sub-crate focuses on a specific domain of scientific computing, while this crate re-exports their functionality in a unified interface.
Features
SciRS2 brings together a large collection of scientific computing tools:
- Core Utilities: Common functionality through
scirs2-core - Linear Algebra: Matrix operations, decompositions, and solvers via
scirs2-linalg - Statistics: Distributions, hypothesis testing, and statistical functions in
scirs2-stats - Optimization: Minimization, root finding, and curve fitting with
scirs2-optimize - Integration: Numerical integration and ODE solvers through
scirs2-integrate - Interpolation: Various interpolation methods in
scirs2-interpolate - Special Functions: Mathematical special functions via
scirs2-special - Fourier Analysis: FFT and related transforms in
scirs2-fft - Signal Processing: Filtering, convolution, and spectral analysis in
scirs2-signal - Sparse Matrices: Efficient sparse matrix formats and operations via
scirs2-sparse - Spatial Algorithms: Spatial data structures and algorithms in
scirs2-spatial - Image Processing: Multidimensional image processing in
scirs2-ndimage - Machine Learning: Clustering, metrics, and neural networks via multiple sub-crates
- Data I/O: Reading and writing various scientific data formats via
scirs2-io - And more: Various additional modules for specific applications
Installation
Add the following to your Cargo.toml:
[]
= "0.1.0-alpha.6" # Main package with default features
You can enable only the features you need:
[]
= { = "0.1.0-alpha.6", = ["linalg", "stats", "optimize"] }
Or use specific modules directly:
[]
= "0.1.0-alpha.6"
= "0.1.0-alpha.6"
= "0.1.0-alpha.6"
Basic usage examples:
use *;
use array;
Feature Flags
This crate uses feature flags to control which sub-crates are included:
core: Core utilities (always enabled)linalg: Linear algebra operationsstats: Statistical functions and distributionsoptimize: Optimization algorithmsintegrate: Numerical integration and ODEsinterpolate: Interpolation methodsfft: Fast Fourier Transformspecial: Special functionssignal: Signal processingsparse: Sparse matricesspatial: Spatial algorithmsndimage: N-dimensional image processingcluster: Clustering algorithmsdatasets: Dataset utilitiesio: I/O utilitiesneural: Neural networksoptim: Optimization for machine learninggraph: Graph algorithmstransform: Data transformationmetrics: Evaluation metricstext: Text processingvision: Computer visionseries: Time series analysisautograd: Automatic differentiation
Architecture
SciRS2 follows a modular architecture where each domain of scientific computing is implemented in a separate crate. This main crate provides a unified interface by re-exporting their functionality.
Architecture Benefits
- Modular Development: Each domain can be developed and tested independently
- Reduced Compilation Time: Users can include only the features they need
- Flexible Dependencies: Sub-crates can have different dependency requirements
- Focused Documentation: Each domain has its own focused documentation
Module Structure
scirs2
├── core // Core utilities
├── linalg // Linear algebra
├── stats // Statistics
├── optimize // Optimization
├── integrate // Integration
├── interpolate // Interpolation
├── fft // Fourier transforms
├── special // Special functions
├── signal // Signal processing
├── sparse // Sparse matrices
├── spatial // Spatial algorithms
├── ndimage // Image processing
└── ... // Other modules
Performance
SciRS2 is designed with performance in mind:
- Uses optimized BLAS and LAPACK implementations where appropriate
- Leverages SIMD operations when available
- Provides parallel processing capabilities
- Uses memory-efficient algorithms
- Employs caching for expensive computations
Contributing
See the CONTRIBUTING.md file for contribution guidelines.
License
This project is dual-licensed under:
You can choose to use either license. See the LICENSE file for details.