[Rust / Python] Gérer numpy avec PyO3 (version d'août 2020)

Ceci est un exemple de code qui appelle myfunction (x: f64) -> Array2 <f64> implémenté dans Rust à partir de Python. Comme il s'agit d'une copie zéro, il est recommandé lorsque des données volumineuses sont générées côté Rust et analysées par Python. Fréquemment utilisé Donc pour la copie.

Cargo.toml


[lib]
name = "mypackage"
crate-type = ["cdylib"]

[dependencies]
pyo3 = { version = "0.11", features = ["extension-module"] }
ndarray = "0.13"
numpy = "0.11"

src/lib.rs


use pyo3::prelude::*;
use ndarray::Array2;
use numpy::{IntoPyArray, PyArray2};

#[pymodule]
fn mypackage(_py: Python, m: &PyModule) -> PyResult<()> {
    #[pyfn(m, "myfunction")]
    fn myfunction_py<'py>(py: Python<'py>, x: f64) -> &'py PyArray2<f64> {
        let arr = myfunction(x);

        arr.into_pyarray(py)
    }

    Ok(())
}

Exemple de compilation et d'exécution:

$ cargo build --release
$ ln -s ./target/release/libmypackage.so mypackage.so
$ 
$ python3
>>> import mypackage
>>> x = 3.14
>>> arr = mypackage.myfunction(x)

Recommended Posts

[Rust / Python] Gérer numpy avec PyO3 (version d'août 2020)
Gérez Excel avec python
Manipuler rabbimq avec python
Étendre NumPy avec Rust
Vérifier la version avec python
[Python] Méthode de calcul avec numpy
[Astuces] Gérez Athena avec Python
Gérez les tableaux numpy avec f2py
Spécifiez la version python avec virtualenv
Gérez les clés Base91 avec python + redis.
Gérez facilement les listes avec python + sqlite3
Carte auto-organisée dans la version Python NumPy
Version Ideone> Python: 3.5 (au 29 août 2017)
Gérer les fichiers Excel CSV avec Python
Gérez chaque version de Python avec Homebrew
Essayer de gérer SQLite3 avec Python [Note]
Gérer numpy avec Cython (méthode par memoryview)
[Français] Premiers pas avec Rust pour les programmeurs Python
Gérez l'environnement de plusieurs versions de Python avec Pythonz, virtualenv
Déboguer avec VS Code en utilisant Boost Python Numpy
1. Statistiques apprises avec Python 1-2. Calcul de diverses statistiques (Numpy)
Utilisation d'Intel MKL avec NumPy / SciPy (version de novembre 2019)
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
[Version améliorée] Script pour surveiller le CPU avec Python
J'ai essayé d'exécuter faiss avec python, Go, Rust
[Python] Comment gérer les caractères japonais avec openCV
Résolvez "AtCoder version! Arimoto (Débutant)" avec Python!
Mon Numpy (Python)
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
Les bases de #Python (#Numpy 1/2)
avec syntaxe (Python)
Les bases de #Python (#Numpy 2/2)
Bingo avec python
Zundokokiyoshi avec python
Version 64 bits de PYTHON2.7
Principes de base de Python #Numpy
Excel avec Python
[Python] Mémo Numpy
Micro-ordinateur avec Python
Cast avec python
Text mining avec Python ① Analyse morphologique (re: version Linux)
[Python] Créer un tableau structuré (stocker des données hétérogènes avec NumPy)
Grattage facile avec Python (version compatible JavaScript / Proxy / Cookie)
Je veux gérer l'optimisation avec python et cplex
LiNGAM (version ICA) à comprendre avec des formules mathématiques et Python
Gestion des versions de Node, Ruby et Python avec anyenv