mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-15 16:56:54 +08:00
fix nanmean
This commit is contained in:
committed by
you-n-g
parent
8eb7a1fddc
commit
f7d7f1a223
@@ -397,9 +397,7 @@ class BaseOrderIndicator:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def sum_all_indicators(
|
def sum_all_indicators(cls, indicators: list, metrics: Union[str, List[str]], fill_value: float = None):
|
||||||
cls, indicators: list, metrics: Union[str, List[str]], fill_value: float = None
|
|
||||||
):
|
|
||||||
"""sum indicators with the same metrics.
|
"""sum indicators with the same metrics.
|
||||||
and assign to the cls(BaseOrderIndicator).
|
and assign to the cls(BaseOrderIndicator).
|
||||||
|
|
||||||
@@ -569,9 +567,7 @@ class PandasOrderIndicator(BaseOrderIndicator):
|
|||||||
return pd.Series()
|
return pd.Series()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def sum_all_indicators(
|
def sum_all_indicators(cls, indicators: list, metrics: Union[str, List[str]], fill_value=None):
|
||||||
cls, indicators: list, metrics: Union[str, List[str]], fill_value=None
|
|
||||||
):
|
|
||||||
if isinstance(metrics, str):
|
if isinstance(metrics, str):
|
||||||
metrics = [metrics]
|
metrics = [metrics]
|
||||||
for metric in metrics:
|
for metric in metrics:
|
||||||
@@ -656,10 +652,10 @@ class NumpySingleMetric(BaseSingleMetric):
|
|||||||
return len(self.metric)
|
return len(self.metric)
|
||||||
|
|
||||||
def sum(self):
|
def sum(self):
|
||||||
return self.metric.sum()
|
return np.nansum(self.metric)
|
||||||
|
|
||||||
def mean(self):
|
def mean(self):
|
||||||
return self.metric.mean()
|
return np.nanmean(self.metric)
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
return len(self.metric[~np.isnan(self.metric)])
|
return len(self.metric[~np.isnan(self.metric)])
|
||||||
@@ -722,7 +718,7 @@ class NumpyOrderIndicator(BaseOrderIndicator):
|
|||||||
self.data = np.zeros((len(NumpyOrderIndicator.ROW), len(metric)))
|
self.data = np.zeros((len(NumpyOrderIndicator.ROW), len(metric)))
|
||||||
self.column = list(metric.keys())
|
self.column = list(metric.keys())
|
||||||
self.column_map = dict(zip(self.column, range(len(self.column))))
|
self.column_map = dict(zip(self.column, range(len(self.column))))
|
||||||
|
|
||||||
metric_column = list(metric.keys())
|
metric_column = list(metric.keys())
|
||||||
if self.column != metric_column:
|
if self.column != metric_column:
|
||||||
assert len(set(self.column) - set(metric_column)) == 0
|
assert len(set(self.column) - set(metric_column)) == 0
|
||||||
@@ -805,7 +801,7 @@ class NumpyOrderIndicator(BaseOrderIndicator):
|
|||||||
else:
|
else:
|
||||||
raise ValueError(f"fill value can not be None in NumpyOrderIndicator")
|
raise ValueError(f"fill value can not be None in NumpyOrderIndicator")
|
||||||
|
|
||||||
# add metric and assign to cls
|
# add metric and assign to cls
|
||||||
metric_sum = sum(indicator_metrics)
|
metric_sum = sum(indicator_metrics)
|
||||||
if cls.data is not None:
|
if cls.data is not None:
|
||||||
raise ValueError(f"this function must assign to an empty order indicator")
|
raise ValueError(f"this function must assign to an empty order indicator")
|
||||||
@@ -815,4 +811,3 @@ class NumpyOrderIndicator(BaseOrderIndicator):
|
|||||||
for i in range(len(metrics)):
|
for i in range(len(metrics)):
|
||||||
cls.row_tag[NumpyOrderIndicator.ROW_MAP[metrics[i]]] = 1
|
cls.row_tag[NumpyOrderIndicator.ROW_MAP[metrics[i]]] = 1
|
||||||
cls.data[NumpyOrderIndicator.ROW_MAP[metrics[i]]] = metric_sum[i]
|
cls.data[NumpyOrderIndicator.ROW_MAP[metrics[i]]] = metric_sum[i]
|
||||||
|
|
||||||
|
|||||||
@@ -330,7 +330,9 @@ class Indicator:
|
|||||||
|
|
||||||
# sum inner order indicators with same metric.
|
# sum inner order indicators with same metric.
|
||||||
all_metric = ["inner_amount", "deal_amount", "trade_price", "trade_value", "trade_cost", "trade_dir"]
|
all_metric = ["inner_amount", "deal_amount", "trade_price", "trade_value", "trade_cost", "trade_dir"]
|
||||||
self.order_indicator_cls.sum_all_indicators(self.order_indicator, inner_order_indicators, all_metric, fill_value=0)
|
self.order_indicator_cls.sum_all_indicators(
|
||||||
|
self.order_indicator, inner_order_indicators, all_metric, fill_value=0
|
||||||
|
)
|
||||||
|
|
||||||
def func(trade_price, deal_amount):
|
def func(trade_price, deal_amount):
|
||||||
# trade_price is np.NaN instead of inf when deal_amount is zero.
|
# trade_price is np.NaN instead of inf when deal_amount is zero.
|
||||||
|
|||||||
Reference in New Issue
Block a user