【发布时间】:2014-05-09 19:43:25
【问题描述】:
所以我有这个程序循环通过大约 2000 多个数据文件,执行傅立叶变换,绘制变换,然后保存图形。感觉程序运行的时间越长,它似乎就越慢。有没有办法通过对下面的代码进行简单的更改来让它运行得更快或更干净?
以前,我将傅立叶变换定义为一个函数,但我在这里读到 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()
【问题讨论】:
-
在这种情况下,Python 的开销将完全微不足道——你的大部分时间将花在 numpy/pylab 调用上——这将被委派给高效的低级代码- 这似乎只是您正在执行的昂贵操作的一个案例。
-
这与您的问题没有直接关系,但总的来说,
from <module> import *并不是一个好主意。这使得您很难判断您正在调用的函数是在哪里定义的,并且可能会导致您不知道的函数名称之间发生冲突。 -
@Lattyware 是的,文件大小不一,从几 Mb 到几十 Mb,因此傅立叶变换可能非常密集。我只是不确定改变一些绘图功能是否会有所帮助。
-
@dano 哦,是的,别担心,我的代码中没有这样做。输入它比写出我导入的每个函数更容易:)
-
和
pylab是个坏主意,直接从numpy和matplotlib.pyplot导入(而pyplot对脚本来说不是个好主意,直接使用OO接口)。
标签: python matplotlib fft figure