J'ai essayé d'optimiser le code ci-dessous mais je n'arrive pas à comprendre comment améliorer la vitesse de calcul. Le code ci-dessous prend presque 30 secondes à courir. cela prend du temps à cause de la matrice bootsam et filedata. Quelqu'un peut-il m'aider s'il vous plaît à optimiser ce code Est-il possible d'améliorer la performance?Python: comment optimiser ce code
import numpy as np
filedata=np.genfromtxt('monthlydata1970to2010.txt',dtype='str') # this will creae 980 * 7 matrix
nboot=5000
results=np.zeros((11,nboot)); #this will create 11*5000 matrix
results[0,:]=600
horizon=360
balance=200
bootsam=np.random.randint(984, size=(984, nboot)) # this will create 984*5000 matrix
for bs in range(0,nboot):
for mn in range(1,horizon+1):
if mn%12 ==1:
bondbal = 24*balance
sp500bal=34*balance
russbal = 44*balance
eafebal=55*balance
cashbal =66*balance
bondbal=bondbal*(1+float(filedata[bootsam[mn-1,bs]-1,2]))
sp500bal=sp500bal*(1+float(filedata[bootsam[mn-1,bs]-1,3]))
russbal=russbal*(1+float(filedata[bootsam[mn-1,bs]-1,4]))
eafebal=eafebal*(1+float(filedata[bootsam[mn-1,bs]-1,5]))
cashbal=cashbal*(1+float(filedata[bootsam[mn-1,bs]-1,6]))
balance=bondbal + sp500bal + russbal + eafebal + cashbal
else:
bondbal=bondbal*(1+float(filedata[bootsam[mn-1,bs]-1,2]))
sp500bal=sp500bal*(1+float(filedata[bootsam[mn-1,bs]-1,3]))
russbal=russbal*(1+float(filedata[bootsam[mn-1,bs]-1,4]))
eafebal=eafebal*(1+float(filedata[bootsam[mn-1,bs]-1,5]))
cashbal=cashbal*(1+float(filedata[bootsam[mn-1,bs]-1,6]))
balance=bondbal + sp500bal + russbal + eafebal + cashbal
if mn == 60:
results[1,bs]=balance
if mn == 120:
results[2,bs]=balance
if mn == 180:
results[3,bs]=balance
if mn == 240:
results[4,bs]=balance
if mn == 300:
results[5,bs]=balance
'1 + float (100)' est la même chose que '101.' – mgilson
Il serait probablement utile si vous disiez ce que vous essayiez de faire avec le code au lieu de demander comment l'améliorer. –
utilisez le module 'timeit' si vous voulez vérifier le temps qu'il prend – avasal