3个不稳定版本
0.2.0 | 2020年10月14日 |
---|---|
0.1.1 | 2020年10月13日 |
0.1.0 | 2020年10月6日 |
在#arr中排名4
12KB
122 行
Rand-array-iid
一个Rust包,用于创建元素独立同分布的数组。
安装
[dependencies]
rand-array-iid = "0.1.0"
示例
正态分布的标量数组
use rand_array_iid::IIDDistr;
use rand_distr::Distribution;
use rand_distr::StandardNormal;
let distr = IIDDistr::new(StandardNormal);
let mut rng = rand::thread_rng();
// Each of x element is distributed according to StandardNormal.
let x : [f64; 10] = distr.sample(&mut rng);
从单位球体采样的3D向量数组
use rand_array_iid::IIDDistr;
use rand_distr::Distribution;
use rand_distr::UnitSphere;
let distr = IIDDistr::new(UnitSphere);
let mut rng = rand::thread_rng();
// Each of x element is sampled uniformly from the surface of the 3D unit sphere.
let x : [[f64; 3]; 10] = distr.sample(&mut rng);
为什么只有数组?
实现std::iter::FromIterator
的集合,如Vec
,在其类型中不包含大小信息,因此分布必须限制在特定大小。它们也可以如下采样
use rand_distr::Distribution;
use rand::Rng;
fn sample_iid<D,R, Col>(dist: D, rng: &mut R, n: usize) -> Col
where
R: Rng + ?Sized,
Col: std::iter::IntoIterator,
Col: std::iter::FromIterator<<Col as std::iter::IntoIterator>::Item>,
D: Distribution<<Col as std::iter::IntoIterator>::Item>,
{
dist.sample_iter(rng).take(n).collect()
}
依赖项
~1.5MB
~26K SLoC