@@ -4,8 +4,7 @@ use std::{
4
4
} ;
5
5
6
6
use ndarray:: {
7
- s, Array , ArrayBase , ArrayViewMut , Axis , Data , Dimension , Ix1 , RemoveAxis , ScalarOperand ,
8
- Slice , Zip ,
7
+ s, Array , ArrayBase , ArrayViewMut , Axis , Data , Dimension , Ix1 , RemoveAxis , ScalarOperand , Zip ,
9
8
} ;
10
9
use num_traits:: { cast, Num , NumCast , Pow } ;
11
10
@@ -132,27 +131,23 @@ impl CubicSpline {
132
131
// RHS vector
133
132
let mut rhs: Array < Sd :: Elem , D > = Array :: zeros ( dim. clone ( ) ) ;
134
133
135
- let mut inner_rhs = rhs. slice_axis_mut ( AX0 , Slice :: from ( 1 ..-1 ) ) ;
136
- Zip :: from ( inner_rhs. axis_iter_mut ( AX0 ) )
137
- . and ( x. windows ( 3 ) )
138
- . and ( data. axis_windows ( AX0 , 3 ) )
139
- . for_each ( |rhs, x, data| {
140
- let y_left = data. index_axis ( AX0 , 0 ) ;
141
- let y_mid = data. index_axis ( AX0 , 1 ) ;
142
- let y_right = data. index_axis ( AX0 , 2 ) ;
143
- let x_left = x[ 0 ] ;
144
- let x_mid = x[ 1 ] ;
145
- let x_right = x[ 2 ] ;
146
-
147
- Zip :: from ( y_left) . and ( y_mid) . and ( y_right) . map_assign_into (
148
- rhs,
149
- |& y_left, & y_mid, & y_right| {
150
- three
151
- * ( ( y_mid - y_left) / ( x_mid - x_left) . pow ( two)
152
- + ( y_right - y_mid) / ( x_right - x_mid) . pow ( two) )
153
- } ,
154
- ) ;
155
- } ) ;
134
+ for i in 1 ..len-1 {
135
+ let rhs = rhs. index_axis_mut ( AX0 , i) ;
136
+ let y_left = data. index_axis ( AX0 , i-1 ) ;
137
+ let y_mid = data. index_axis ( AX0 , i) ;
138
+ let y_right = data. index_axis ( AX0 , i+1 ) ;
139
+ let x_left = x[ i-1 ] ;
140
+ let x_mid = x[ i] ;
141
+ let x_right = x[ i+1 ] ;
142
+ Zip :: from ( y_left) . and ( y_mid) . and ( y_right) . map_assign_into (
143
+ rhs,
144
+ |& y_left, & y_mid, & y_right| {
145
+ three
146
+ * ( ( y_mid - y_left) / ( x_mid - x_left) . pow ( two)
147
+ + ( y_right - y_mid) / ( x_right - x_mid) . pow ( two) )
148
+ } ,
149
+ ) ;
150
+ }
156
151
157
152
let rhs_0 = rhs. index_axis_mut ( AX0 , 0 ) ;
158
153
let data_0 = data. index_axis ( AX0 , 0 ) ;
0 commit comments