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);
}
性能提示
- 重用RandomGenerator实例而不是频繁创建新的
- 对于大量随机数生成,考虑使用
generate_vec
批量生成 - 复杂概率分布计算前检查参数有效性
注意: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库的主要功能:
- 基本随机数生成(整数、浮点数、布尔值)
- 各种概率分布的采样(正态分布、泊松分布、均匀分布)
- 高级抽样功能(随机选择、加权选择、数组打乱)
- 概率计算(概率密度函数、累积分布函数、分位数计算)
- 多线程环境下的使用方式
要运行此示例,请确保在Cargo.toml中添加了possiblyrandom依赖,然后使用cargo run
命令执行程序。