如何从一维ndarray创建三维ndarray(对应NumPy meshgrid的Rust实现)
Rust实现类似NumPy meshgrid的三维坐标数组生成
要在Rust中实现和你给出的Python代码相同的功能,我们可以使用ndarray库(Rust生态中常用的多维数组库),具体步骤如下:
1. 添加依赖
首先在Cargo.toml中加入ndarray的依赖:
[dependencies] ndarray = "0.15"
2. 实现代码
use ndarray::{Array1, Axis, linspace, meshgrid, GridIndexing}; fn main() { // 生成三个一维数组,对应Python中的np.linspace(-1, 1, 50) let x = linspace(-1.0, 1.0, 50); let y = linspace(-1.0, 1.0, 50); let z = linspace(-1.0, 1.0, 50); // 生成网格并指定ij索引模式,匹配NumPy的indexing="ij" let (xx, yy, zz) = meshgrid(&x, &y, &z).indexing(GridIndexing::Ij); // 将三个三维数组合并为一个形状为(3, 50, 50, 50)的数组 let a = ndarray::stack(Axis(0), &[xx.view(), yy.view(), zz.view()]) .expect("数组合并失败"); // 输出数组形状验证结果 println!("数组形状: {:?}", a.shape()); }
代码说明
linspace:和NumPy的np.linspace功能完全一致,用于生成指定区间、指定数量的一维均匀分布数组。meshgrid:ndarray的meshgrid默认使用xy索引模式,通过.indexing(GridIndexing::Ij)可以切换为和NumPy一致的ij索引。stack:沿着第0轴(最外层)合并三个三维数组,最终得到的数组形状和你Python代码中a的形状完全相同((3, 50, 50, 50))。
内容的提问来源于stack exchange,提问作者Pioneer_11
相关产品推荐
相关产品推荐

