rgsl/
stats.rs

1//
2// A rust binding for the GSL library by Guillaume Gomez (guillaume1.gomez@gmail.com)
3//
4
5#[doc(alias = "gsl_stats_wtss")]
6pub fn wtss(w: &[f64], wstride: usize, data: &[f64], stride: usize) -> f64 {
7    unsafe { sys::gsl_stats_wtss(w.as_ptr(), wstride, data.as_ptr(), stride, data.len() as _) }
8}
9
10#[doc(alias = "gsl_stats_wtss_m")]
11pub fn wtss_m(w: &[f64], wstride: usize, data: &[f64], stride: usize, wmean: f64) -> f64 {
12    unsafe {
13        sys::gsl_stats_wtss_m(
14            w.as_ptr(),
15            wstride,
16            data.as_ptr(),
17            stride,
18            data.len() as _,
19            wmean,
20        )
21    }
22}
23
24#[doc(alias = "gsl_stats_wabsdev")]
25pub fn wabsdev(w: &[f64], wstride: usize, data: &[f64], stride: usize) -> f64 {
26    unsafe { sys::gsl_stats_wabsdev(w.as_ptr(), wstride, data.as_ptr(), stride, data.len() as _) }
27}
28
29#[doc(alias = "gsl_stats_wskew")]
30pub fn wskew(w: &[f64], wstride: usize, data: &[f64], stride: usize) -> f64 {
31    unsafe { sys::gsl_stats_wskew(w.as_ptr(), wstride, data.as_ptr(), stride, data.len() as _) }
32}
33
34#[doc(alias = "gsl_stats_wkurtosis")]
35pub fn wkurtosis(w: &[f64], wstride: usize, data: &[f64], stride: usize) -> f64 {
36    unsafe { sys::gsl_stats_wkurtosis(w.as_ptr(), wstride, data.as_ptr(), stride, data.len() as _) }
37}
38
39#[doc(alias = "gsl_stats_wvariance_m")]
40pub fn wvariance_m(w: &[f64], wstride: usize, data: &[f64], stride: usize, wmean: f64) -> f64 {
41    unsafe {
42        sys::gsl_stats_wvariance_m(
43            w.as_ptr(),
44            wstride,
45            data.as_ptr(),
46            stride,
47            data.len() as _,
48            wmean,
49        )
50    }
51}
52
53#[doc(alias = "gsl_stats_wabsdev_m")]
54pub fn wabsdev_m(w: &[f64], wstride: usize, data: &[f64], stride: usize, wmean: f64) -> f64 {
55    unsafe {
56        sys::gsl_stats_wabsdev_m(
57            w.as_ptr(),
58            wstride,
59            data.as_ptr(),
60            stride,
61            data.len() as _,
62            wmean,
63        )
64    }
65}
66
67#[doc(alias = "gsl_stats_wskew_m_sd")]
68pub fn wskew_m_sd(
69    w: &[f64],
70    wstride: usize,
71    data: &[f64],
72    stride: usize,
73    wmean: f64,
74    wsd: f64,
75) -> f64 {
76    unsafe {
77        sys::gsl_stats_wskew_m_sd(
78            w.as_ptr(),
79            wstride,
80            data.as_ptr(),
81            stride,
82            data.len() as _,
83            wmean,
84            wsd,
85        )
86    }
87}
88
89#[doc(alias = "gsl_stats_wkurtosis_m_sd")]
90pub fn wkurtosis_m_sd(
91    w: &[f64],
92    wstride: usize,
93    data: &[f64],
94    stride: usize,
95    wmean: f64,
96    wsd: f64,
97) -> f64 {
98    unsafe {
99        sys::gsl_stats_wkurtosis_m_sd(
100            w.as_ptr(),
101            wstride,
102            data.as_ptr(),
103            stride,
104            data.len() as _,
105            wmean,
106            wsd,
107        )
108    }
109}
110
111#[doc(alias = "gsl_stats_pvariance")]
112pub fn pvariance(data1: &[f64], stride1: usize, data2: &[f64], stride2: usize) -> f64 {
113    unsafe {
114        sys::gsl_stats_pvariance(
115            data1.as_ptr(),
116            stride1,
117            data1.len() as _,
118            data2.as_ptr(),
119            stride2,
120            data2.len() as _,
121        )
122    }
123}
124
125#[doc(alias = "gsl_stats_ttest")]
126pub fn ttest(data1: &[f64], stride1: usize, data2: &[f64], stride2: usize) -> f64 {
127    unsafe {
128        sys::gsl_stats_ttest(
129            data1.as_ptr(),
130            stride1,
131            data1.len() as _,
132            data2.as_ptr(),
133            stride2,
134            data2.len() as _,
135        )
136    }
137}
138
139#[doc(alias = "gsl_stats_max")]
140pub fn max(data: &[f64], stride: usize) -> f64 {
141    unsafe { sys::gsl_stats_max(data.as_ptr(), stride, data.len() as _) }
142}
143
144#[doc(alias = "gsl_stats_min")]
145pub fn min(data: &[f64], stride: usize) -> f64 {
146    unsafe { sys::gsl_stats_min(data.as_ptr(), stride, data.len() as _) }
147}
148
149/// Returns `(min, max)`.
150#[doc(alias = "gsl_stats_minmax")]
151pub fn stats_minmax(data: &[f64], stride: usize) -> (f64, f64) {
152    let mut min = 0.;
153    let mut max = 0.;
154
155    unsafe { sys::gsl_stats_minmax(&mut min, &mut max, data.as_ptr(), stride, data.len() as _) }
156    (min, max)
157}
158
159#[doc(alias = "gsl_stats_max_index")]
160pub fn max_index(data: &[f64], stride: usize) -> usize {
161    unsafe { sys::gsl_stats_max_index(data.as_ptr(), stride, data.len() as _) }
162}
163
164#[doc(alias = "gsl_stats_min_index")]
165pub fn min_index(data: &[f64], stride: usize) -> usize {
166    unsafe { sys::gsl_stats_min_index(data.as_ptr(), stride, data.len() as _) }
167}
168
169/// Returns `(min, max)`.
170#[doc(alias = "gsl_stats_minmax_index")]
171pub fn stats_minmax_index(data: &[f64], stride: usize) -> (usize, usize) {
172    let mut min = 0;
173    let mut max = 0;
174
175    unsafe {
176        sys::gsl_stats_minmax_index(&mut min, &mut max, data.as_ptr(), stride, data.len() as _)
177    }
178    (min, max)
179}
180
181#[cfg(feature = "v2_5")]
182#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_5")))]
183#[doc(alias = "gsl_stats_select")]
184pub fn select(data: &mut [f64], stride: usize, k: usize) -> f64 {
185    unsafe { sys::gsl_stats_select(data.as_mut_ptr(), stride, data.len() as _, k) }
186}
187
188#[cfg(feature = "v2_5")]
189#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_5")))]
190#[doc(alias = "gsl_stats_median")]
191pub fn median(data: &mut [f64], stride: usize) -> f64 {
192    unsafe { sys::gsl_stats_median(data.as_mut_ptr(), stride, data.len() as _) }
193}