#rand #array #random #arr

no-std rand-array-iid

创建独立同分布的数组

3个不稳定版本

0.2.0 2020年10月14日
0.1.1 2020年10月13日
0.1.0 2020年10月6日

#arr中排名4

MIT授权

12KB
122

Rand-array-iid

Build Status Crates.io Docs

一个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