我有一个for循环,可以处理超过900万个组合(为此,我使用了itertools库),必须更快地执行下面的代码,循环遍历所有组合都花费了很长时间。感谢任何建议
wb = xw.books('FX VEGA BT.xlsm')
sht = wb.sheets['Sheet1']
#retrieving data from excel
df = pd.DataFrame(sht.range('PY_PNL').value, columns=['10','20','25','40','50','60','70','75','80','90'])
#df has shape of 3115 rows × 10 columns
def sharpe(x):
s = round(np.average(x)/np.std(x)*np.sqrt(252),2)
return s
shrps = []
outlist = []
mult = (-1,-2.5,0,1,2.5)
perm = itertools.product(mult,repeat = 10)
for p in perm:
c = df*p
c = c.sum(axis='columns')
outlist.append(p)
shrps.append(sharpe(c))
答案 0 :(得分:0)
您可以使用列表推导,这样会更快一些:
shrps = [sharpe((df*p).sum(axis='columns')) for p in perms]
如果您确实需要名为perm
的{{1}}的副本,则可以使用outlist
软件包中的deepcopy
:
copy
要进一步加快该过程,可以在import copy
outlist = copy.deepcopy(perm)
函数中更改某些内容(我不知道它的外观)。