Я хотел бы улучшить время выполнения моего кода. В настоящее время он очень медленный, потому что я открываю текстовый файл в режиме добавления и записываю значения в конец файла, а затем я закрываю файл каждый раз, когда я петлю. Может ли кто-нибудь помочь мне сохранить все мои данные в структуре данных python, а затем вывести результаты в том же формате (т. Е. Все результаты в текстовом файле с каждым значением, разделенным пробелом)? Я новичок в python и не понимаю, как это реализовать. Вот мой код:Улучшение времени выполнения с помощью структуры данных Python
######import required packages########
import numpy
import math
#######Set working directory##########
import os
os.chdir('/Users/DevEnv/')
######Remove files generated from previous simulations#####
try:
os.remove('excitations.txt')
except OSError:
pass
##############Set Model Parameters#####################
n=2 #number of iterations -Change for desired number of loops
tlength=1501 #Length of time interval - DO NOT CHANGE
wu=100 #DO NOT CHANGE
N=250 #wu*T/4Pi approximately - DO NOT CHANGE
Pi=math.radians(180)
t=numpy.linspace(0,10,tlength)
Dw=wu/float(N)
for k in range(0,n):
A=[]
wi=[]
for i in range (0,N):
wi.append(Dw/2+i*Dw) #Middle of distribution
for j in range (0,tlength):
Aj=[]
phi=numpy.random.rand(N,1)*2*Pi #Generate random phase angle on 0,2pi
for i in range (0,N):
w=wi[i]
Sv=(((1+4*0.6**2*(w/15)**2)/((1-(w/15)**2)**2+4*0.6**2*(w/15)**2))*(0.0000753*(w/1.5)**4/((1-(w/1.5)**2)**2+4*0.6**2*(w/1.5)**2)))
Aj.append(math.sqrt(Sv*Dw)*2*math.cos(wi[i]*t[j]+phi[i]))
A.append(sum(Aj))
outFile = open('excitations.txt','a') #open/create the output file
for item in A:
outFile.write('%s ' %item)
outFile.write('\n')
outFile.close() #close the output file
Прежде всего, вы можете сохранить результаты расчетов, которые являются постоянными. Например, 4 * 0,6 ** 2. Во-вторых, у вас три вложенные петли, что обычно плохо. Проверьте, действительно ли вам нужно три? – GurV
Спасибо за предложение. Я буду хранить постоянные значения в качестве переменных. Тем не менее, мне нужны три вложенных цикла – user7269405