Open tadeohepperle opened 3 months ago
You can detach the by taking it in the form Py<PyArray2<f32>>
which you can stored inside your Rust type. Cloning/copying this value will only increment its reference count, not duplicate the data.
Also on a sidenote, how can I make sure that the rows of the numpy array are all f32 and are laid out as slices in memory?
If you take PyArray2<T>
then it is ensured that it contains values of type T
, e.g. f32
as in your example. Such an array will not store values of dynamic type for which only PyArray2<PyObject>
would be suitable.
You can whether an array is laid contiguously in memory using the is_contiguous
method and access it as a slice using the as_slice(_mut)
method.
@adamreichold Thanks a lot for your help, that makes sense.
Hey, I want to write some Rust algorithms that operate on a numpy array that was created in python. E.g.:
Because the array is quite big, I would like to avoid copying the data and just wrap a
Array2<f32>
that is passed from python. But how can I take aArray2<f32>
and pass it into thefn new
of the Rust struct? I only managed to get this working, by extenting the lifetime ofnew<'py>(arr: PyReadonlyArray2<'py, f32>) -> PyResult<Self>
to'static
with unsafe which is likely incorrect:Also on a sidenote, how can I make sure that the rows of the numpy array are all
f32
and are laid out as slices in memory?Thanks in advance for any help.