Rust numeric library contains linear algebra, numerical analysis, statistics and machine learning tools with R, MATLAB, Python like macros.
Peroxide provides various features.
default
- Pure Rust (No dependencies of architecture - Perfect cross compilation)O3
- OpenBLAS (Perfect performance but little bit hard to set-up - Strongly recommend to read OpenBLAS for Rust)plot
- With matplotlib of python, we can draw any plots.nc
- To handle netcdf file format with DataFramecsv
- To handle csv file format with Matrix or DataFrameserde
- serialization with Serde.If you want to do high performance computation and more linear algebra, then choose openblas feature. If you don't want to depend C/C++ or Fortran libraries, then choose default feature. If you want to draw plot with some great templates, then choose plot feature.
You can choose any features simultaneously.
Peroxide uses 1D data structure to describe matrix. So, it's too easy to integrate BLAS. It means peroxide guarantees perfect performance for linear algebraic computations.
Rust is so strange for Numpy, MATLAB, R users. Thus, it's harder to learn the more rusty libraries. With peroxide, you can do heavy computations with R, Numpy, MATLAB like syntax.
For example,
#[macro_use]
extern crate peroxide;
use peroxide::prelude::*;
fn main() {
// MATLAB like matrix constructor
let a = ml_matrix("1 2;3 4");
// R like matrix constructor (default)
let b = matrix(c!(1,2,3,4), 2, 2, Row);
// Or use zeros
let mut z = zeros(2, 2);
z[(0,0)] = 1.0;
z[(0,1)] = 2.0;
z[(1,0)] = 3.0;
z[(1,1)] = 4.0;
// Simple but effective operations
let c = a * b; // Matrix multiplication (BLAS integrated)
// Easy to pretty print
c.print();
// c[0] c[1]
// r[0] 1 3
// r[1] 2 4
// Easy to do linear algebra
c.det().print();
c.inv().print();
// and etc.
}
In peroxide, there are two different options.
prelude
: To simple use.fuga
: To choose numerical algorithms explicitly.For examples, let's see norm.
In prelude
, use norm
is simple: a.norm()
. But it only uses L2 norm for Vec<f64>
. (For Matrix
, Frobenius norm.)
#[macro_use]
extern crate peroxide;
use peroxide::prelude::*;
fn main() {
let a = c!(1, 2, 3);
let l2 = a.norm(); // L2 is default vector norm
assert_eq!(l2, 14f64.sqrt());
}
In fuga
, use various norms. But you should write longer than prelude
.
#[macro_use]
extern crate peroxide;
use peroxide::fuga::*;
fn main() {
let a = c!(1, 2, 3);
let l1 = a.norm(Norm::L1);
let l2 = a.norm(Norm::L2);
let l_inf = a.norm(Norm::LInf);
assert_eq!(l1, 6f64);
assert_eq!(l2, 14f64.sqrt());
assert_eq!(l_inf, 3f64);
}
Peroxide can do many things.
O3
feature)O3
feature)Vec<f64>
fmap
: map for all elementscol_map
: map for column vectorsrow_map
: map for row vectorsReal
trait to constrain for f64
and AD
(for ODE)rand
craterand-dist
cratepuruspe
crate (pure rust)pyo3
& matplotlib
csv
files (csv
feature)netcdf
files (nc
feature)After 0.23.0
, peroxide is compatible with mathematical structures.
Matrix
, Vec<f64>
, f64
are considered as inner product vector spaces.
And Matrix
, Vec<f64>
are linear operators - Vec<f64>
to Vec<f64>
and Vec<f64>
to f64
.
For future, peroxide will include more & more mathematical concepts. (But still practical.)
Rust & Cargo are awesome for scientific computations. You can use any external packages easily with Cargo, not make. And default runtime performance of Rust is also great. If you use many iterations for computations, then Rust become great choice.
Corresponding to 0.30.2
O3
feature - Need OpenBLAS
plot
feature - Need matplotlib
of pythonnc
feature - Need netcdf
cargo.toml
[dependencies]
peroxide = "0.30"
[dependencies.peroxide]
version = "0.30"
default-features = false
features = ["O3"]
[dependencies.peroxide]
version = "0.30"
default-features = false
features = ["plot"]
[dependencies.peroxide]
version = "0.30"
default-features = false
features = ["nc"]
[dependencies.peroxide]
version = "0.30"
default-features = false
features = ["csv"]
[dependencies.peroxide]
version = "0.30"
default-features = false
features = ["O3", "plot", "nc", "csv"]
QR
or SVD
then should use O3
feature (there are no implementations for these decompositions in default
)nc
feature and netcdf
format. (It is much more effective than csv
and json
.)nc
feature to export data as netcdf format and use python to draw plot.
plot
feature has limited plot abilities.mod
and re-export
puruspe
)
Vec<f64>
pyo3
)To see RELEASES.md
See CONTRIBUTES.md
To see TODO.md
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。