diff --git a/src/transform.rs b/src/transform.rs index d377109..cae4a10 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -410,7 +410,7 @@ impl Default for Transform { Self { parameters, dparameters: vec![0f64; ndim * ndim + ndim], - center: vec![0f64; ndim], + center: vec![-0.5; ndim], shape: vec![0usize; ndim], dimension: PhantomData, } @@ -997,6 +997,28 @@ impl Transform { dimension: Default::default(), } } + + pub fn swap_axes(&self, a: usize, b: usize) -> Self { + let mut new = self.clone(); + let n = self.ndim(); + let mut m = (0..n).collect::>(); + (m[a], m[b]) = (m[b], m[a]); + for (i, j) in (0..n).zip(m) { + if i != j { + new.parameters[i + n * j] = self.parameters[j + n * i]; + new.dparameters[i + n * j] = self.dparameters[j + n * i]; + new.parameters[j + n * i] = self.parameters[i + n * j]; + new.dparameters[j + n * i] = self.dparameters[i + n * j]; + } + } + new.parameters[n + a] = self.parameters[n + b]; + new.dparameters[n + a] = self.dparameters[n + b]; + new.center[a] = self.center[b]; + new.center[b] = self.center[a]; + new.shape[a] = self.shape[b]; + new.shape[b] = self.shape[a]; + new + } } impl Transform {