Rust bindings for the NumPy C-API
pip install numpy
)
numpy >= 1.16.0
, though older version may work.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.
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.14" numpy = "0.14" ```
```rust use numpy::PyArray1; use pyo3::prelude::{PyResult, Python}; use pyo3::types::IntoPyDict;
fn main() -> PyResult<()> {
Python::withgil(|py| {
let np = py.import("numpy")?;
let locals = [("np", np)].intopydict(py);
let pyarray: &PyArray1
```
Please see simple-extension directory for the complete example. Also, we have an example project with ndarray-linalg.
```toml [lib] name = "rust_ext" crate-type = ["cdylib"]
[dependencies] numpy = "0.14" ndarray = "0.14"
[dependencies.pyo3] version = "0.14" features = ["extension-module"] ```
```rust use ndarray::{ArrayD, ArrayViewD, ArrayViewMutD}; use numpy::{IntoPyArray, PyArrayDyn, PyReadonlyArrayDyn}; use pyo3::prelude::{pymodule, PyModule, PyResult, Python};
fn rustext(py: Python<'>, m: &PyModule) -> PyResult<()> {
// immutable example
fn axpy(a: f64, x: ArrayViewD<', f64>, y: ArrayViewD<'_, f64>) -> ArrayD
// mutable example (no return)
fn mult(a: f64, mut x: ArrayViewMutD<'_, f64>) {
x *= a;
}
// wrapper of `axpy`
#[pyfn(m, "axpy")]
fn axpy_py<'py>(
py: Python<'py>,
a: f64,
x: PyReadonlyArrayDyn<f64>,
y: PyReadonlyArrayDyn<f64>,
) -> &'py PyArrayDyn<f64> {
let x = x.as_array();
let y = y.as_array();
axpy(a, x, y).into_pyarray(py)
}
// wrapper of `mult`
#[pyfn(m, "mult")]
fn mult_py(_py: Python<'_>, a: f64, x: &PyArrayDyn<f64>) -> PyResult<()> {
let x = unsafe { x.as_array_mut() };
mult(a, x);
Ok(())
}
Ok(())
} ```
We welcome issues and pull requests.
PyO3's contrinbuting.md is a nice guide for starting. Also, we have a gitter channel for communicating.