ndarray_numtest/
random_init.rs1
2use ndarray::{Array, Dimension, ShapeBuilder};
3use ndarray_rand::RandomExt;
4use num_complex::Complex;
5use super::random;
6
7pub trait RealNormalInit<D: Dimension> {
8 fn real_normal_init<Sh>(shape: Sh, mean: f64, var: f64) -> Self where Sh: ShapeBuilder<Dim = D>;
9}
10
11pub trait ComplexNormalInit<D: Dimension> {
12 fn complex_normal_init<Sh>(shape: Sh, re0: f64, im0: f64, re_var: f64, im_var: f64) -> Self
13 where Sh: ShapeBuilder<Dim = D>;
14}
15
16macro_rules! impl_normal_init {
17 ($float:ty) => {
18impl<D> RealNormalInit<D> for Array<$float, D>
19 where D: Dimension
20{
21 fn real_normal_init<Sh>(shape: Sh, mean: f64, var: f64) -> Self
22 where Sh: ShapeBuilder<Dim = D>
23 {
24 let dist = random::RealNormal::new(mean, var);
25 Array::random(shape, dist)
26 }
27}
28
29impl<D> ComplexNormalInit<D> for Array<Complex<$float>, D>
30 where D: Dimension
31{
32 fn complex_normal_init<Sh>(shape: Sh, re0: f64, im0: f64, re_var: f64, im_var: f64) -> Self
33 where Sh: ShapeBuilder<Dim = D>
34 {
35 let dist = random::ComplexNormal::new(re0, im0, re_var, im_var);
36 Array::random(shape, dist)
37 }
38}
39}} impl_normal_init!(f32);
42impl_normal_init!(f64);