在for循环中优化append()

2024-06-03 08:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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))

Tags: columns代码dffornp建议itertoolswb
1条回答
网友
1楼 · 发布于 2024-06-03 08:22:42

您可以使用列表理解,它会更快一些:

shrps = [sharpe((df*p).sum(axis='columns')) for p in perms]

如果确实需要名为outlistperm副本,可以使用copy包中的deepcopy

import copy

outlist = copy.deepcopy(perm)

为了进一步加快进程,您可以在sharpe()函数中更改某些内容(我不知道它是什么样子)

相关问题 更多 >