You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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标准库风格的容器,无需额外的多维数组库。

  1. 添加依赖
    在Cargo.toml中加入rand crate:
[dependencies]
rand = "0.8"
  1. 实现代码
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。

  1. 添加依赖
    在Cargo.toml中加入相关 crate:
[dependencies]
rand = "0.8"
ndarray = "0.15"
ndarray-rand = "0.14"
  1. 实现代码
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:36:31