Skip to content

Commit 893cbd6

Browse files
committed
Workaround for axis_windows bug
rust-ndarray/ndarray#1304
1 parent aa4f977 commit 893cbd6

File tree

1 file changed

+18
-23
lines changed

1 file changed

+18
-23
lines changed

src/interp1d/strategies/cubic_spline.rs

+18-23
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ use std::{
44
};
55

66
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,
98
};
109
use num_traits::{cast, Num, NumCast, Pow};
1110

@@ -132,27 +131,23 @@ impl CubicSpline {
132131
// RHS vector
133132
let mut rhs: Array<Sd::Elem, D> = Array::zeros(dim.clone());
134133

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+
}
156151

157152
let rhs_0 = rhs.index_axis_mut(AX0, 0);
158153
let data_0 = data.index_axis(AX0, 0);

0 commit comments

Comments
 (0)