return -sp.special.logsumexp(-temperature * data_array) / temperature
 
 
+def boltzmann_operator(series: pd.Series, alpha: float) -> float:
+    """
+    Compute the Boltzmann operator of an series with parameter alpha.
+    """
+    data_array = series.to_numpy()
+    if data_array.size == 0:
+        return np.nan
+    if alpha == 0:
+        return np.mean(data_array)
+    scaled_data = alpha * data_array
+    shifted_exponentials = np.exp(scaled_data - np.max(scaled_data))
+    numerator = np.sum(data_array * shifted_exponentials)
+    denominator = np.sum(shifted_exponentials)
+    return numerator / denominator
+
+
 def round_to_nearest(value: float, step: int) -> int:
     """
     Round a value to the nearest multiple of a given step.