【问题标题】:How can I convert PyArray into Vec<Vec<T>> in Rust如何在 Rust 中将 PyArray 转换为 Vec<Vec<T>>
【发布时间】:2021-01-02 13:30:41
【问题描述】:

我正在使用 Rust 中的 numpy crate 来处理来自 python 的二维数组。 PyArray (https://docs.rs/numpy/0.11.0/numpy/array/struct.PyArray.html) 实现了 from_vec2() 函数,将 Vec&lt;Vec&lt;T&gt;&gt; 转换为 PyArray&lt;T, 2&gt; (2D PyArray),以及 to_vec() 函数,将二维数组展平为一维向量并返回 @ 987654327@,但它没有实现to_vec2()。有没有一种我缺少的简单方法来进行这种转换,还是我必须手动实现这个功能?

谢谢。

【问题讨论】:

    标签: python rust numpy-ndarray pyo3


    【解决方案1】:

    您可以使用.iter 以及一些迭代器方法来执行此操作:

    arr.iter().unwrap().map(|arr| arr.to_vec().unwrap()).collect::<Vec<_>>()
    

    【讨论】:

    • 不幸的是 .iter() 首先强制转换为向量,因此您再次将二维数组展平为一维数组,因此您映射的元素本身不是数组。
    • @Yaxlat 为PyArrays 定义了一个iter,您将to_vec 映射到每个元素上,两个得到一个二维向量。
    • 我确实尝试过这个,但是iterPyArray 展平,所以元素只会变成浮点数或整数或其他任何东西,而不是您可以应用to_vec 的数组。您的代码只是给出了一个错误,指出类型 f64 没有名为 to_vec 的方法。我现在刚刚手动实现了这个,但它非常混乱。无论如何感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    相关资源
    最近更新 更多