Commit 66b2fbf2 authored by Dr.李's avatar Dr.李

further enhance

parent 7e531c66
...@@ -16,9 +16,9 @@ from alphamind.benchmarks.portfolio.rankbuild import benchmark_build_rank_with_g ...@@ -16,9 +16,9 @@ from alphamind.benchmarks.portfolio.rankbuild import benchmark_build_rank_with_g
if __name__ == '__main__': if __name__ == '__main__':
benchmark_neutralize(3000, 10, 1000) # benchmark_neutralize(3000, 10, 1000)
benchmark_neutralize(30, 10, 50000) # benchmark_neutralize(30, 10, 50000)
benchmark_neutralize(50000, 50, 20) # benchmark_neutralize(50000, 50, 20)
# benchmark_standardize(3000, 10, 1000) # benchmark_standardize(3000, 10, 1000)
# benchmark_standardize_with_group(3000, 10, 1000, 30) # benchmark_standardize_with_group(3000, 10, 1000, 30)
# benchmark_standardize(30, 10, 50000) # benchmark_standardize(30, 10, 50000)
...@@ -31,9 +31,9 @@ if __name__ == '__main__': ...@@ -31,9 +31,9 @@ if __name__ == '__main__':
# benchmark_winsorize_normal_with_group(30, 10, 5000, 5) # benchmark_winsorize_normal_with_group(30, 10, 5000, 5)
# benchmark_winsorize_normal(50000, 50, 20) # benchmark_winsorize_normal(50000, 50, 20)
# benchmark_winsorize_normal_with_group(50000, 50, 20, 50) # benchmark_winsorize_normal_with_group(50000, 50, 20, 50)
# benchmark_build_rank(3000, 1000, 300) benchmark_build_rank(3000, 1000, 300)
# benchmark_build_rank_with_group(3000, 1000, 10, 30) benchmark_build_rank_with_group(3000, 1000, 10, 30)
# benchmark_build_rank(30, 50000, 3) benchmark_build_rank(30, 50000, 3)
# benchmark_build_rank_with_group(30, 50000, 1, 3) benchmark_build_rank_with_group(30, 50000, 1, 3)
# benchmark_build_rank(50000, 20, 3000) benchmark_build_rank(50000, 20, 3000)
# benchmark_build_rank_with_group(50000, 20, 10, 300) benchmark_build_rank_with_group(50000, 20, 10, 300)
...@@ -7,28 +7,27 @@ Created on 2017-4-26 ...@@ -7,28 +7,27 @@ Created on 2017-4-26
import numpy as np import numpy as np
from numpy import zeros from numpy import zeros
from numpy import max
def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.ndarray: def rank_build(er: np.ndarray, use_rank: int, groups: np.ndarray=None) -> np.ndarray:
length = len(er)
neg_er = -er neg_er = -er
masks = zeros(len(er), dtype=bool) masks = zeros(length, dtype=bool)
ordering = neg_er.argsort() weights = zeros(length)
if groups is not None: if groups is not None:
max_g = max(groups) max_g = groups.max()
index_range = np.arange(len(er)) index_range = np.arange(length)
for i in range(max_g+1):
for i in range(max_g + 1):
current_mask = groups == i current_mask = groups == i
current_index = index_range[current_mask] current_index = index_range[current_mask]
current_ordering = neg_er[current_mask].argsort() current_ordering = neg_er[current_mask].argsort()
masks[current_index[current_ordering[:use_rank]]] = True masks[current_index[current_ordering[:use_rank]]] = True
weights[masks] = 1. / masks.sum()
else: else:
ordering = neg_er.argsort()
masks[ordering[:use_rank]] = True masks[ordering[:use_rank]] = True
weights[masks] = 1. / use_rank
weights = zeros(len(er))
weights[masks] = 1. / use_rank
return weights return weights
...@@ -36,12 +35,12 @@ if __name__ == '__main__': ...@@ -36,12 +35,12 @@ if __name__ == '__main__':
import datetime as dt import datetime as dt
x = np.random.randn(3000) x = np.random.randn(4)
groups = np.random.randint(30, size=3000) groups = np.random.randint(2, size=4)
start = dt.datetime.now() start = dt.datetime.now()
for i in range(10000): for i in range(10000):
weights = rank_build(x, 30, groups) weights = rank_build(x, 1, groups)
print(dt.datetime.now() - start) print(dt.datetime.now() - start)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment