如何在Rust中创建等效于Numpy np.random.rand(3,2)的随机二维数组
在Rust中生成等效于Numpy
np.random.rand(3,2) 的随机二维数组 要在Rust中生成和Numpy np.random.rand(3,2) 效果一致的二维数组(元素为[0.0, 1.0)区间的均匀分布随机浮点数),可以通过两种方式实现:使用基础的rand crate生成嵌套Vec,或者使用ndarray crate模拟Numpy的数组结构。
方法一:使用rand crate生成嵌套Vec
这种方式依赖Rust标准库风格的容器,无需额外的多维数组库。
- 添加依赖
在Cargo.toml中加入randcrate:
[dependencies] rand = "0.8"
- 实现代码
use rand::Rng; fn main() { // 定义目标数组的维度:3行,2列 let rows = 3; let cols = 2; // 初始化线程本地随机数生成器 let mut rng = rand::thread_rng(); // 生成二维数组:每行包含cols个随机浮点数,共rows行 let random_array: Vec<Vec<f64>> = (0..rows) .map(|_| (0..cols) .map(|_| rng.gen::<f64>()) .collect() ) .collect(); // 模拟Numpy的输出格式打印结果 println!("array(["); for row in random_array { println!(" [{:.8}, {:.8}],", row[0], row[1]); } println!("])"); }
rand::thread_rng():获取线程安全的随机数生成器,是rand crate推荐的默认生成器。rng.gen::<f64>():生成[0.0, 1.0)区间的均匀分布浮点数,和np.random.rand的行为完全匹配。- 嵌套的
map+collect:将迭代器转换为Vec<Vec<f64>>,对应二维数组结构。
方法二:使用ndarray crate模拟Numpy数组结构
如果需要更接近Numpy的多维数组特性(比如连续内存、向量操作),可以使用ndarray及其随机扩展ndarray-rand。
- 添加依赖
在Cargo.toml中加入相关 crate:
[dependencies] rand = "0.8" ndarray = "0.15" ndarray-rand = "0.14"
- 实现代码
use ndarray::Array2; use ndarray_rand::rand_distr::Uniform; use ndarray_rand::RandomExt; fn main() { // 直接生成3×2的二维数组,元素取自[0.0,1.0)的均匀分布 let random_array: Array2<f64> = Array2::random((3, 2), Uniform::new(0.0, 1.0)); // 打印结果,格式类似Numpy数组 println!("{}", random_array); }
Array2::random:直接生成指定维度的随机数组,无需手动嵌套迭代。Uniform::new(0.0,1.0):明确指定和np.random.rand一致的均匀分布区间。ndarray的Array2结构:内存连续,支持和Numpy类似的切片、广播等操作。
内容的提问来源于stack exchange,提问作者a_b
相关产品推荐
相关产品推荐

