Skip to content

Commit 1c125fc

Browse files
committed
Suggest that cost functions take ndarrays
1 parent e33ecc7 commit 1c125fc

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

climada/util/calibrate/base.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,15 @@ class Input:
102102
data: pd.DataFrame
103103
impact_func_creator: Callable[..., ImpactFuncSet]
104104
impact_to_dataframe: Callable[[Impact], pd.DataFrame]
105-
cost_func: Callable[[pd.DataFrame, pd.DataFrame, pd.DataFrame | None], Number]
105+
cost_func: Callable[[np.ndarray, np.ndarray, np.ndarray | None], Number]
106106
bounds: Optional[Mapping[str, Union[Bounds, Tuple[Number, Number]]]] = None
107107
constraints: Optional[Union[ConstraintType, list[ConstraintType]]] = None
108108
impact_calc_kwds: Mapping[str, Any] = field(
109109
default_factory=lambda: {"assign_centroids": False}
110110
)
111111
missing_data_value: float = np.nan
112112
data_weights: pd.DataFrame | None = field(default=None, kw_only=True)
113-
missing_weights_value: float = field(default=np.nan, kw_only=True)
113+
missing_weights_value: float = field(default=0.0, kw_only=True)
114114
assign_centroids: InitVar[bool] = field(default=True, kw_only=True)
115115

116116
def __post_init__(self, assign_centroids):
@@ -434,7 +434,7 @@ class Optimizer(ABC):
434434
input: Input
435435

436436
def _target_func(
437-
self, data: pd.DataFrame, predicted: pd.DataFrame, weights: pd.DataFrame | None
437+
self, data: np.ndarray, predicted: np.ndarray, weights: np.ndarray | None
438438
) -> Number:
439439
"""Target function for the optimizer
440440
@@ -523,9 +523,14 @@ def _opt_func(self, *args, **kwargs) -> Number:
523523
copy=True,
524524
fill_value=self.input.missing_weights_value,
525525
)
526+
weights_aligned = weights_aligned.to_numpy().flatten()
526527

527528
# Compute target function
528-
return self._target_func(data_aligned, impact_df_aligned, weights_aligned)
529+
return self._target_func(
530+
data_aligned.to_numpy().flatten(),
531+
impact_df_aligned.to_numpy().flatten(),
532+
weights_aligned,
533+
)
529534

530535
@abstractmethod
531536
def run(self, **opt_kwargs) -> Output:

climada/util/calibrate/ensemble.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -623,10 +623,10 @@ class AverageEnsembleOptimizer(EnsembleOptimizer):
623623
If samples of the input data should be drawn with replacement
624624
"""
625625

626-
sample_fraction: InitVar[float] = 0.8
626+
sample_fraction: InitVar[float] = 1.0
627627
ensemble_size: InitVar[int] = 20
628628
random_state: InitVar[int] = 1
629-
replace: InitVar[bool] = False
629+
replace: InitVar[bool] = True
630630

631631
def __post_init__(self, sample_fraction, ensemble_size, random_state, replace):
632632
"""Create the samples"""

0 commit comments

Comments
 (0)