所以我有一个程序,在2000多个数据文件中循环,执行傅立叶变换,绘制变换图,然后保存图形。感觉程序运行的时间越长,似乎越慢。有没有什么方法可以让它运行得更快或更干净,只需在下面的代码中做一个简单的更改?在
以前,我把fourier变换定义为一个函数,但是我在这里读到python有很高的函数调用开销,所以我去掉了这个函数,现在直接运行。另外,我读到clf()
有一个稳定的记录,如果你循环许多图,这些图会变得很大,并且会减慢过程,所以我把它改为close()
。这些好的变化在哪里?在
from numpy import *
from pylab import *
for filename in filelist:
t,f = loadtxt(filename, unpack=True)
dt = t[1]-t[0]
fou = absolute(fft.fft(f))
frq = absolute(fft.fftfreq(len(t),dt))
ymax = median(fou)*30
figure(figsize=(15,7))
plot(frq,fou,'k')
xlim(0,400)
ylim(0,ymax)
iname = filename.replace('.dat','.png')
savefig(iname,dpi=80)
close()
是的,加上近距离是个不错的选择。它应该有助于弥补你的内存泄漏。我还建议将figure、plotting和close命令移到循环之外-只需更新plot创建的Line2D实例。查看this了解更多信息。在
注意:我觉得这个应该有用,但我还没有在这里测试过。在
我测试了与ipython中类似的东西,我注意到当目录中有很多文件时,循环变得相当慢。该目录中的文件系统似乎存在与该文件夹中的文件数有关的开销,可能与以下内容的查找时间有关:
你可以试着把你的文件列表分成小块,然后保存在不同的目录中。在
您是否考虑过使用
multiprocessing
模块来并行处理这些文件?假设这里实际上是CPU限制的(意味着fourier变换占用了大部分运行时间,而不是读/写文件),这样可以加快执行时间,而实际上不需要加速循环本身。在编辑:
例如,类似这样的东西(未经测试,但应该会给你一个想法):
您可能需要调整工作进程中实际完成的工作。例如,尝试并行化磁盘I/O部分可能不会对您有多大帮助(甚至会伤害您)。在
相关问题 更多 >
编程相关推荐