@@ -168,6 +168,7 @@ impl Summary {
168
168
impl < ' a > Stats for & ' a [ f64 ] {
169
169
170
170
// FIXME #11059 handle NaN, inf and overflow
171
+ #[ allow( deprecated_owned_vector) ]
171
172
fn sum ( self ) -> f64 {
172
173
let mut partials : ~[ f64 ] = ~[ ] ;
173
174
@@ -246,28 +247,28 @@ impl<'a> Stats for &'a [f64] {
246
247
247
248
fn median_abs_dev ( self ) -> f64 {
248
249
let med = self . median ( ) ;
249
- let abs_devs = self . map ( |& v| num:: abs ( med - v) ) ;
250
+ let abs_devs: Vec < f64 > = self . iter ( ) . map ( |& v| num:: abs ( med - v) ) . collect ( ) ;
250
251
// This constant is derived by smarter statistics brains than me, but it is
251
252
// consistent with how R and other packages treat the MAD.
252
- abs_devs. median ( ) * 1.4826
253
+ abs_devs. as_slice ( ) . median ( ) * 1.4826
253
254
}
254
255
255
256
fn median_abs_dev_pct ( self ) -> f64 {
256
257
( self . median_abs_dev ( ) / self . median ( ) ) * 100.0
257
258
}
258
259
259
260
fn percentile ( self , pct : f64 ) -> f64 {
260
- let mut tmp = self . to_owned ( ) ;
261
- f64_sort ( tmp) ;
262
- percentile_of_sorted ( tmp, pct)
261
+ let mut tmp = Vec :: from_slice ( self ) ;
262
+ f64_sort ( tmp. as_mut_slice ( ) ) ;
263
+ percentile_of_sorted ( tmp. as_slice ( ) , pct)
263
264
}
264
265
265
266
fn quartiles ( self ) -> ( f64 , f64 , f64 ) {
266
- let mut tmp = self . to_owned ( ) ;
267
- f64_sort ( tmp) ;
268
- let a = percentile_of_sorted ( tmp, 25.0 ) ;
269
- let b = percentile_of_sorted ( tmp, 50.0 ) ;
270
- let c = percentile_of_sorted ( tmp, 75.0 ) ;
267
+ let mut tmp = Vec :: from_slice ( self ) ;
268
+ f64_sort ( tmp. as_mut_slice ( ) ) ;
269
+ let a = percentile_of_sorted ( tmp. as_slice ( ) , 25.0 ) ;
270
+ let b = percentile_of_sorted ( tmp. as_slice ( ) , 50.0 ) ;
271
+ let c = percentile_of_sorted ( tmp. as_slice ( ) , 75.0 ) ;
271
272
( a, b, c)
272
273
}
273
274
@@ -308,10 +309,10 @@ fn percentile_of_sorted(sorted_samples: &[f64],
308
309
///
309
310
/// See: http://en.wikipedia.org/wiki/Winsorising
310
311
pub fn winsorize ( samples : & mut [ f64 ] , pct : f64 ) {
311
- let mut tmp = samples . to_owned ( ) ;
312
- f64_sort ( tmp) ;
313
- let lo = percentile_of_sorted ( tmp, pct) ;
314
- let hi = percentile_of_sorted ( tmp, 100.0 -pct) ;
312
+ let mut tmp = Vec :: from_slice ( samples ) ;
313
+ f64_sort ( tmp. as_mut_slice ( ) ) ;
314
+ let lo = percentile_of_sorted ( tmp. as_slice ( ) , pct) ;
315
+ let hi = percentile_of_sorted ( tmp. as_slice ( ) , 100.0 -pct) ;
315
316
for samp in samples. mut_iter ( ) {
316
317
if * samp > hi {
317
318
* samp = hi
@@ -1009,6 +1010,7 @@ mod tests {
1009
1010
1010
1011
#[ test]
1011
1012
fn test_boxplot_nonpositive( ) {
1013
+ #[ allow( deprecated_owned_vector) ]
1012
1014
fn t ( s : & Summary , expected : ~str ) {
1013
1015
use std:: io:: MemWriter ;
1014
1016
let mut m = MemWriter :: new ( ) ;
@@ -1035,7 +1037,6 @@ mod tests {
1035
1037
#[ cfg( test) ]
1036
1038
mod bench {
1037
1039
use BenchHarness ;
1038
- use std:: slice;
1039
1040
use stats:: Stats ;
1040
1041
1041
1042
#[ bench]
@@ -1047,10 +1048,10 @@ mod bench {
1047
1048
#[ bench]
1048
1049
pub fn sum_many_f64 ( bh : & mut BenchHarness ) {
1049
1050
let nums = [ -1e30 , 1e60 , 1e30 , 1.0 , -1e60 ] ;
1050
- let v = slice :: from_fn ( 500 , |i| nums[ i%5 ] ) ;
1051
+ let v = Vec :: from_fn ( 500 , |i| nums[ i%5 ] ) ;
1051
1052
1052
1053
bh. iter ( || {
1053
- v. sum ( ) ;
1054
+ v. as_slice ( ) . sum ( ) ;
1054
1055
} )
1055
1056
}
1056
1057
}
0 commit comments