Rust bindings for the NumPy C-API
pip install numpy
)Note Starting from 0.3, rust-numpy migrated from rust-cpython to pyo3. If you want to use rust-cpython, use version 0.2.1 from crates.io.
Currently 3.5, 3.6, 3.7 are supported.
Version 0.5.0 is the last version that supports Python2.
If you want to compile this library with Python2, please use 0.5.0 from crates.io.
In addition, you have to add a feature flag in Cargo.toml
like
toml
[dependencies.numpy]
version = "0.5.0"
features = ["python2"]
.
You can also automatically specify python version in setup.py, using setuptools-rust.
``` toml [package] name = "numpy-test"
[dependencies] pyo3 = "0.6.0" numpy = "0.5.0" ```
``` rust extern crate numpy; extern crate pyo3; use numpy::{PyArray1, getarraymodule}; use pyo3::prelude::{ObjectProtocol, PyResult, Python}; use pyo3::types::PyDict;
fn main() -> Result<(), ()> { let gil = Python::acquiregil(); main(gil.python()).maperr(|e| { eprintln!("error! :{:?}", e); // we can't display python error type via ::std::fmt::Display // so print error here manually e.printandsetsyslastvars(gil.python()); }) }
fn main<'py>(py: Python<'py>) -> PyResult<()> {
let np = py.import("numpy")?;
let dict = PyDict::new(py);
dict.setitem("np", np)?;
let pyarray: &PyArray1
Please see the example directory for a complete example
```toml [lib] name = "rust_ext" crate-type = ["cdylib"]
[dependencies] numpy = "0.5.0" ndarray = "0.12"
[dependencies.pyo3] version = "0.6.0" features = ["extension-module"] ```
```rust extern crate ndarray; extern crate numpy; extern crate pyo3;
use ndarray::{ArrayD, ArrayViewD, ArrayViewMutD}; use numpy::{IntoPyArray, PyArrayDyn}; use pyo3::prelude::{pymodule, Py, PyModule, PyResult, Python};
fn rustext(py: Python, m: &PyModule) -> PyResult<()> {
// immutable example
fn axpy(a: f64, x: ArrayViewD
// mutable example (no return)
fn mult(a: f64, mut x: ArrayViewMutD<f64>) {
x *= a;
}
// wrapper of `axpy`
#[pyfn(m, "axpy")]
fn axpy_py(
py: Python,
a: f64,
x: &PyArrayDyn<f64>,
y: &PyArrayDyn<f64>,
) -> Py<PyArrayDyn<f64>> {
let x = x.as_array();
let y = y.as_array();
axpy(a, x, y).into_pyarray(py).to_owned()
}
// wrapper of `mult`
#[pyfn(m, "mult")]
fn mult_py(_py: Python, a: f64, x: &PyArrayDyn<f64>) -> PyResult<()> {
let x = x.as_array_mut();
mult(a, x);
Ok(())
}
Ok(())
} ```
We need your feedback.
Don't hesitate to open issues!
v0.5.0
v0.4.0
PyArrayModule
and import Numpy API automaticallyIntoPyArray
and add ToPyArray
cratePyArray<T, D>
ndarray::IntoDimension
to specify dimensionv0.3.1, v0.3.2
v0.3.0
v0.2.1
IntoPyErr
, IntoPyResult
for error translationv0.2.0
IntoPyArray
, ToPyArray
PyArray
creation functions are changedv0.1.1
v0.1.0