Пример #1
0
def standardize(x: np.ndarray, groups: np.ndarray = None, ddof=1) -> np.ndarray:
    if groups is not None:
        groups = group_mapping(groups)
        mean_values = transform(groups, x, 'mean')
        std_values = transform(groups, x, 'std', ddof)

        return (x - mean_values) / np.maximum(std_values, 1e-8)
    else:
        return (x - simple_mean(x, axis=0)) / np.maximum(simple_std(x, axis=0, ddof=ddof), 1e-8)
Пример #2
0
def winsorize_normal(x: np.ndarray,
                     num_stds: int = 3,
                     groups: np.ndarray = None) -> np.ndarray:
    if groups is not None:
        groups = group_mapping(groups)
        mean_values = transform(groups, x, 'mean')
        std_values = transform(groups, x, 'std')
        res = mask_values_2d(x, mean_values, std_values, num_stds)
    else:
        std_values = simple_std(x, axis=0)
        mean_values = simple_mean(x, axis=0)
        res = mask_values_1d(x, mean_values, std_values, num_stds)
    return res
Пример #3
0
def projection(x: np.ndarray, groups: np.ndarray=None, axis=1) -> np.ndarray:
    if groups is not None and axis == 0:
        groups = group_mapping(groups)
        projected = transform(groups, x, 'project')
        return projected
    else:
        return x / simple_sqrsum(x, axis=axis).reshape((-1, 1))
Пример #4
0
def long_short_build(er: np.ndarray,
                     leverage: float=1.,
                     groups: np.ndarray=None) -> np.ndarray:
    if er.ndim == 1:
        er = er.reshape((-1, 1))

    if groups is None:
        return er / simple_abssum(er, axis=0) * leverage
    else:
        groups = group_mapping(groups)
        return transform(groups, er, 'scale', scale=leverage)
Пример #5
0
def winsorize_normal(x: np.ndarray,
                     num_stds: int = 3,
                     ddof=1,
                     groups: np.ndarray = None,
                     method: str = 'flat',
                     interval: float = 0.5) -> np.ndarray:
    if groups is not None:
        groups = group_mapping(groups)
        mean_values = transform(groups, x, 'mean')
        std_values = transform(groups, x, 'std', ddof)
        if method == 'flat':
            res = mask_values_2d(x, mean_values, std_values, num_stds)
        else:
            res = interp_values_2d(x, groups, mean_values, std_values,
                                   num_stds, interval)
    else:
        std_values = simple_std(x, axis=0, ddof=ddof)
        mean_values = simple_mean(x, axis=0)
        if method == 'flat':
            res = mask_values_1d(x, mean_values, std_values, num_stds)
        else:
            res = interp_values_1d(x, mean_values, std_values, num_stds,
                                   interval)
    return res
Пример #6
0
def long_short_builder(er: np.ndarray,
                       leverage: float = 1.,
                       groups: np.ndarray = None,
                       masks: np.ndarray = None) -> np.ndarray:
    er = er.copy()

    if masks is not None:
        er[masks] = 0.
        er[~masks] = er[~masks] - er[~masks].mean()

    if er.ndim == 1:
        er = er.reshape((-1, 1))

    if groups is None:
        return er / simple_abssum(er, axis=0) * leverage
    else:
        groups = group_mapping(groups)
        return transform(groups, er, 'scale', scale=leverage)