|
1 | 1 | import copy
|
2 | 2 | import ctypes
|
3 |
| -from typing import List, Optional |
| 3 | +from typing import List, Optional, Sequence |
4 | 4 |
|
5 | 5 | import numpy as np
|
6 | 6 |
|
@@ -205,6 +205,12 @@ def take(self, idxs: np.ndarray) -> "_BaseLocalScaler":
|
205 | 205 | out.stats_ = self.stats_[idxs].copy()
|
206 | 206 | return out
|
207 | 207 |
|
| 208 | + @staticmethod |
| 209 | + def stack(scalers: Sequence["_BaseLocalScaler"]) -> "_BaseLocalScaler": |
| 210 | + out = copy.deepcopy(scalers[0]) |
| 211 | + out.stats_ = np.vstack([sc.stats_ for sc in scalers]) |
| 212 | + return out |
| 213 | + |
208 | 214 |
|
209 | 215 | class LocalMinMaxScaler(_BaseLocalScaler):
|
210 | 216 | """Scale each group to the [0, 1] interval"""
|
@@ -354,6 +360,12 @@ def take(self, idxs: np.ndarray) -> "Difference":
|
354 | 360 | out.tails_ = self.tails_[idxs].copy()
|
355 | 361 | return out
|
356 | 362 |
|
| 363 | + @staticmethod |
| 364 | + def stack(scalers: Sequence["Difference"]) -> "Difference": |
| 365 | + out = Difference(scalers[0].d) |
| 366 | + out.tails_ = np.hstack([sc.tails_ for sc in scalers]) |
| 367 | + return out |
| 368 | + |
357 | 369 |
|
358 | 370 | class AutoDifferences:
|
359 | 371 | """Find and apply the optimal number of differences to each group.
|
@@ -447,6 +459,16 @@ def take(self, idxs: np.ndarray) -> "AutoDifferences":
|
447 | 459 | out.tails_ = [tail[idxs].copy() for tail in self.tails_]
|
448 | 460 | return out
|
449 | 461 |
|
| 462 | + @staticmethod |
| 463 | + def stack(scalers: Sequence["AutoDifferences"]) -> "AutoDifferences": |
| 464 | + out = copy.deepcopy(scalers[0]) |
| 465 | + out.diffs_ = np.hstack([sc.diffs_ for sc in scalers]) |
| 466 | + out.tails_ = [ |
| 467 | + np.hstack([sc.tails_[i] for sc in scalers]) |
| 468 | + for i in range(len(scalers[0].tails_)) |
| 469 | + ] |
| 470 | + return out |
| 471 | + |
450 | 472 |
|
451 | 473 | class AutoSeasonalDifferences(AutoDifferences):
|
452 | 474 | """Find and apply the optimal number of seasonal differences to each group.
|
@@ -604,3 +626,14 @@ def take(self, idxs: np.ndarray) -> "AutoSeasonalityAndDifferences":
|
604 | 626 | out.diffs_ = [diffs[idxs].copy() for diffs in self.diffs_]
|
605 | 627 | out.tails_ = [tail[idxs].copy() for tail in self.tails_]
|
606 | 628 | return out
|
| 629 | + |
| 630 | + @staticmethod |
| 631 | + def stack( |
| 632 | + scalers: Sequence["AutoSeasonalityAndDifferences"], |
| 633 | + ) -> "AutoSeasonalityAndDifferences": |
| 634 | + out = AutoSeasonalityAndDifferences( |
| 635 | + scalers[0].max_season_length, scalers[0].max_diffs, scalers[0].n_seasons |
| 636 | + ) |
| 637 | + out.diffs_ = [np.hstack([sc.diffs_[i] for sc in scalers]) for i in range(out.max_diffs)] |
| 638 | + out.tails_ = [np.hstack([sc.tails_[i] for sc in scalers]) for i in range(out.max_diffs)] |
| 639 | + return out |
0 commit comments