I – Install pip package
pip install maturinpip install maturinpip install maturin
Enter fullscreen mode Exit fullscreen mode
II – Create project
maturin new --bindings pyo3 --mixed name_projectmaturin new --bindings pyo3 --mixed name_projectmaturin new --bindings pyo3 --mixed name_project
Enter fullscreen mode Exit fullscreen mode
III – Create rust lib
Create in src
matrix.rs
with your code like this
<span>use</span> <span>rand</span><span>::</span><span>Rng</span><span>;</span><span>pub</span> <span>fn</span> <span>generate_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span><span>let</span> <span>mut</span> <span>matrix</span> <span>=</span> <span>vec!</span><span>[];</span><span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span><span>let</span> <span>mut</span> <span>row</span> <span>=</span> <span>vec!</span><span>[];</span><span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span><span>row</span><span>.push</span><span>(</span><span>rand</span><span>::</span><span>thread_rng</span><span>()</span><span>.gen_range</span><span>(</span><span>0</span><span>..</span><span>100</span><span>));</span><span>}</span><span>matrix</span><span>.push</span><span>(</span><span>row</span><span>);</span><span>}</span><span>matrix</span><span>}</span><span>use</span> <span>rand</span><span>::</span><span>Rng</span><span>;</span> <span>pub</span> <span>fn</span> <span>generate_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span> <span>let</span> <span>mut</span> <span>matrix</span> <span>=</span> <span>vec!</span><span>[];</span> <span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span> <span>let</span> <span>mut</span> <span>row</span> <span>=</span> <span>vec!</span><span>[];</span> <span>for</span> <span>_</span> <span>in</span> <span>0</span><span>..</span><span>10</span> <span>{</span> <span>row</span><span>.push</span><span>(</span><span>rand</span><span>::</span><span>thread_rng</span><span>()</span><span>.gen_range</span><span>(</span><span>0</span><span>..</span><span>100</span><span>));</span> <span>}</span> <span>matrix</span><span>.push</span><span>(</span><span>row</span><span>);</span> <span>}</span> <span>matrix</span> <span>}</span>use rand::Rng; pub fn generate_matrix() -> Vec<Vec<i32>> { let mut matrix = vec![]; for _ in 0..10 { let mut row = vec![]; for _ in 0..10 { row.push(rand::thread_rng().gen_range(0..100)); } matrix.push(row); } matrix }
Enter fullscreen mode Exit fullscreen mode
In src/lib.rs
add your code like this :
<span>mod</span> <span>matrix</span><span>;</span><span>#[pyfunction]</span><span>fn</span> <span>random_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span><span>matrix</span><span>::</span><span>generate_matrix</span><span>()</span><span>}</span><span>mod</span> <span>matrix</span><span>;</span> <span>#[pyfunction]</span> <span>fn</span> <span>random_matrix</span><span>()</span> <span>-></span> <span>Vec</span><span><</span><span>Vec</span><span><</span><span>i32</span><span>>></span> <span>{</span> <span>matrix</span><span>::</span><span>generate_matrix</span><span>()</span> <span>}</span>mod matrix; #[pyfunction] fn random_matrix() -> Vec<Vec<i32>> { matrix::generate_matrix() }
Enter fullscreen mode Exit fullscreen mode
And functions in the python module like this :
<span>#[pymodule]</span><span>fn</span> <span>my_project</span><span>(</span><span>m</span><span>:</span> <span>&</span><span>Bound</span><span><</span><span>'_</span><span>,</span> <span>PyModule</span><span>></span><span>)</span> <span>-></span> <span>PyResult</span><span><</span><span>()</span><span>></span> <span>{</span><span>m</span><span>.add_function</span><span>(</span><span>wrap_pyfunction!</span><span>(</span><span>random_matrix</span><span>,</span> <span>m</span><span>)</span><span>?</span><span>)</span><span>?</span><span>;</span><span>Ok</span><span>(())</span><span>}</span><span>#[pymodule]</span> <span>fn</span> <span>my_project</span><span>(</span><span>m</span><span>:</span> <span>&</span><span>Bound</span><span><</span><span>'_</span><span>,</span> <span>PyModule</span><span>></span><span>)</span> <span>-></span> <span>PyResult</span><span><</span><span>()</span><span>></span> <span>{</span> <span>m</span><span>.add_function</span><span>(</span><span>wrap_pyfunction!</span><span>(</span><span>random_matrix</span><span>,</span> <span>m</span><span>)</span><span>?</span><span>)</span><span>?</span><span>;</span> <span>Ok</span><span>(())</span> <span>}</span>#[pymodule] fn my_project(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(random_matrix, m)?)?; Ok(()) }
Enter fullscreen mode Exit fullscreen mode
IV – Compile
maturin build && pip install .maturin build && pip install .maturin build && pip install .
Enter fullscreen mode Exit fullscreen mode
V – Test
In python/name_project/test/
for exemple, create one file with this and run it.
<span>import</span> <span>my_project</span><span>matrix</span> <span>=</span> <span>my_project</span><span>.</span><span>random_matrix</span><span>()</span><span>print</span><span>(</span><span>matrix</span><span>)</span><span>import</span> <span>my_project</span> <span>matrix</span> <span>=</span> <span>my_project</span><span>.</span><span>random_matrix</span><span>()</span> <span>print</span><span>(</span><span>matrix</span><span>)</span>import my_project matrix = my_project.random_matrix() print(matrix)
Enter fullscreen mode Exit fullscreen mode
© 版权声明
THE END
暂无评论内容