1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-15 16:56:54 +08:00

fix nanmean

This commit is contained in:
wangwenxi.handsome
2021-08-17 12:45:37 +00:00
committed by you-n-g
parent 8eb7a1fddc
commit f7d7f1a223
2 changed files with 9 additions and 12 deletions

View File

@@ -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)])
@@ -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]

View File

@@ -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.