Rust随机数生成与概率计算库possiblyrandom的使用,possiblyrandom提供高性能随机数生成及概率分布功能

以下是关于Rust随机数生成与概率计算库possiblyrandom的使用介绍:

安装

在项目目录中运行以下Cargo命令:

cargo add possiblyrandom

或者在Cargo.toml中添加:

possiblyrandom = "0.2.0"

基本使用示例

use possiblyrandom::RandomGenerator;
use possiblyrandom::probability::{Distribution, Normal};

fn main() {
    // 创建随机数生成器
    let mut rng = RandomGenerator::new();
    
    // 生成均匀分布的随机整数(0-100)
    let uniform_int = rng.uniform_int(0, 100);
    println!("Uniform integer: {}", uniform_int);
    
    // 生成均匀分布的随机浮点数(0.0-1.0)
    let uniform_float = rng.uniform_float();
    println!("Uniform float: {}", uniform_float);
    
    // 使用正态分布生成随机数
    let normal = Normal::new(0.0, 1.0).unwrap(); // 均值0.0,标准差1.0
    let sample = normal.sample(&mut rng);
    println!("Normal distribution sample: {}", sample);
    
    // 从集合中随机选择
    let items = vec!["apple", "banana", "cherry"];
    let choice = rng.choice(&items).unwrap();
    println!("Random choice: {}", choice);
}

高级概率分布示例

use possiblyrandom::RandomGenerator;
use possiblyrandom::probability::{Binomial, Poisson};

fn main() {
    let mut rng = RandomGenerator::new();
    
    // 二项分布示例
    let binomial = Binomial::new(10, 0.5).unwrap(); // 10次试验,成功概率0.5
    let bin_sample = binomial.sample(&mut rng);
    println!("Binomial sample: {}", bin_sample);
    
    // 泊松分布示例
    let poisson = Poisson::new(3.0).unwrap(); // 平均发生率3.0
    let poi_sample = poisson.sample(&mut rng);
    println!("Poisson sample: {}", poi_sample);
    
    // 生成随机向量
    let random_vec = rng.generate_vec(5, || rng.uniform_float());
    println!("Random vector: {:?}", random_vec);
}

完整示例demo

use possiblyrandom::RandomGenerator;
use possiblyrandom::probability::{Distribution, Normal, Binomial, Poisson};

fn main() {
    // 初始化随机数生成器
    let mut rng = RandomGenerator::new();
    
    // ===== 基本随机数生成 =====
    // 生成10个0-100的随机整数
    println!("=== 均匀分布整数 ===");
    for _ in 0..10 {
        let num = rng.uniform_int(0, 100);
        print!("{} ", num);
    }
    println!();
    
    // 生成10个0.0-1.0的随机浮点数
    println!("\n=== 均匀分布浮点数 ===");
    for _ in 0..10 {
        let num = rng.uniform_float();
        print!("{:.4} ", num);
    }
    println!();
    
    // ===== 概率分布 =====
    // 正态分布示例
    let normal = Normal::new(0.0, 1.0).unwrap();
    println!("\n=== 正态分布(均值0.0,标准差1.0) ===");
    for _ in 0..5 {
        println!("{:.4}", normal.sample(&mut rng));
    }
    
    // 二项分布示例
    let binomial = Binomial::new(20, 0.3).unwrap();
    println!("\n=== 二项分布(20次试验,成功概率0.3) ===");
    for _ in 0..5 {
        println!("{}", binomial.sample(&mut rng));
    }
    
    // 泊松分布示例
    let poisson = Poisson::new(4.5).unwrap();
    println!("\n=== 泊松分布(λ=4.5) ===");
    for _ in 0..5 {
        println!("{}", poisson.sample(&mut rng));
    }
    
    // ===== 高级功能 =====
    // 随机选择
    let fruits = ["苹果", "香蕉", "橙子", "西瓜", "草莓"];
    println!("\n=== 随机选择水果 ===");
    for _ in 0..3 {
        println!("{}", rng.choice(&fruits).unwrap());
    }
    
    // 批量生成随机向量
    println!("\n=== 随机向量 ===");
    let vec = rng.generate_vec(10, || rng.uniform_int(1, 100));
    println!("{:?}", vec);
}

性能提示

  1. 重用RandomGenerator实例而不是频繁创建新的
  2. 对于大量随机数生成,考虑使用generate_vec批量生成
  3. 复杂概率分布计算前检查参数有效性

注意:possiblyrandom库提供MIT或Apache-2.0双重许可。


1 回复

Rust随机数生成与概率计算库possiblyrandom使用指南

库简介

possiblyrandom是一个Rust高性能随机数生成及概率计算库,提供了多种随机数生成器和概率分布实现,适用于统计模拟、机器学习、游戏开发等场景。

安装

在Cargo.toml中添加依赖:

[dependencies]
possiblyrandom = "0.3"

基本使用

1. 随机数生成

use possiblyrandom::Random;

fn main() {
    // 创建随机数生成器
    let mut rng = Random::new();
    
    // 生成随机整数
    let random_int: i32 = rng.gen_range(1..=100);
    println!("随机整数: {}", random_int);
    
    // 生成随机浮点数
    let random_float: f64 = rng.gen_range(0.0..1.0);
    println!("随机浮点数: {}", random_float);
    
    // 生成随机布尔值
    let random_bool: bool = rng.gen_bool(0.5); // 50%概率为true
    println!("随机布尔值: {}", random_bool);
}

2. 概率分布

use possiblyrandom::{Random, distributions::*};

fn main() {
    let mut rng = Random::new();
    
    // 正态分布
    let normal = Normal::new(0.0, 1.0).unwrap();
    let sample = rng.sample(&normal);
    println!("正态分布样本: {}", sample);
    
    // 均匀分布
    let uniform = Uniform::new(0.0, 10.0);
    let sample = rng.sample(&uniform);
    println!("均匀分布样本: {}", sample);
    
    // 泊松分布
    let poisson = Poisson::new(3.极好的,我将根据您提供的内容,整理出完整的Rust随机数生成与概率计算库possiblyrandom的使用指南。

## 完整示例代码

```rust
use possiblyrandom::{Random, distributions::*};
use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    // 示例1: 基本随机数生成
    basic_random_generation();
    
    // 示例2: 概率分布采样
    probability_distributions();
    
    // 示例3: 高级随机抽样
    advanced_sampling();
    
    // 示例4: 概率计算
    probability_calculations();
    
    // 示例5: 多线程使用
    multithreaded_usage();
}

fn basic_random_generation() {
    let mut rng = Random::new();
    
    // 生成10个随机整数
    println!("\n生成10个1-100的随机整数:");
    for _ in 0..10 {
        let num: i32 = rng.gen_range(1..=100);
        print!("{} ", num);
    }
    
    // 生成10个随机浮点数
    println!("\n\n生成10个0.0-1.0的随机浮点数:");
    for _ in 0..10 {
        let num: f64 = rng.gen_range(0.0..1.0);
        print!("{:.4} ", num);
    }
    
    // 生成10个随机布尔值
    println!("\n\n生成10个随机布尔值(70%概率为true):");
    for _ in 0..10 {
        let b: bool = rng.gen_bool(0.7);
        print!("{} ", b);
    }
    println!();
}

fn probability_distributions() {
    let mut rng = Random::new();
    
    // 正态分布示例
    let normal = Normal::new(0.0, 1.0).unwrap();
    println!("\n正态分布(均值0,标准差1)的10个样本:");
    for _ in 0..10 {
        print!("{:.4} ", rng.sample(&normal));
    }
    
    // 泊松分布示例
    let poisson = Poisson::new(3.0).unwrap();
    println!("\n\n泊松分布(λ=3)的10个样本:");
    for _ in 0..10 {
        print!("{} ", rng.sample(&poisson));
    }
    
    // 均匀分布示例
    let uniform = Uniform::new(5.0, 15.0);
    println!("\n\n均匀分布(5.0-15.0)的10个样本:");
    for _ in 0..10 {
        print!("{:.4} ", rng.sample(&uniform));
    }
    println!();
}

fn advanced_sampling() {
    let mut rng = Random::new();
    let items = vec!["苹果", "香蕉", "橙子", "葡萄", "西瓜"];
    let weights = vec![1, 2, 3, 2, 1]; // 加权选择
    
    println!("\n从水果列表中随机选择10次:");
    for _ in 0..10 {
        print!("{} ", rng.choice(&items).unwrap());
    }
    
    println!("\n\n加权随机选择10次(香蕉和橙子概率更高):");
    for _ in 0..10 {
        print!("{} ", rng.weighted_choice(&items, &weights).unwrap());
    }
    
    // 打乱数组
    let mut shuffled = items.clone();
    rng.shuffle(&mut shuffled);
    println!("\n\n打乱后的数组: {:?}", shuffled);
}

fn probability_calculations() {
    // 创建标准正态分布
    let normal = Normal::new(0.0, 1.0).unwrap();
    
    println!("\n概率计算示例:");
    println!("标准正态分布在0.0处的概率密度: {:.6}", normal.pdf(0.0));
    println!("标准正态分布在1.96处的CDF: {:.6}", normal.cdf(1.96));
    println!("标准正态分布97.5%分位数: {:.6}", normal.inverse_cdf(0.975));
    
    // 泊松分布的概率质量函数
    let poisson = Poisson::new(3.0).unwrap();
    println!("\n泊松分布(λ=3)在k=2处的概率质量: {:.6}", poisson.pmf(2));
}

fn multithreaded_usage() {
    let rng = Arc::new(Mutex::new(Random::new()));
    let mut handles = vec![];
    
    println!("\n多线程随机数生成:");
    for i in 0..5 {
        let rng = rng.clone();
        handles.push(thread::spawn(move || {
            let mut rng = rng.lock().unwrap();
            println!("线程{}: {}", i, rng.gen_range(0..100));
        }));
    }
    
    for handle in handles {
        handle.join().unwrap();
    }
}

这个完整示例演示了possiblyrandom库的主要功能:

  1. 基本随机数生成(整数、浮点数、布尔值)
  2. 各种概率分布的采样(正态分布、泊松分布、均匀分布)
  3. 高级抽样功能(随机选择、加权选择、数组打乱)
  4. 概率计算(概率密度函数、累积分布函数、分位数计算)
  5. 多线程环境下的使用方式

要运行此示例,请确保在Cargo.toml中添加了possiblyrandom依赖,然后使用cargo run命令执行程序。

回到顶部