gpt4 book ai didi

python - Python 中的 DFT 比 C 花费更长的时间

转载 作者:行者123 更新时间:2023-11-28 22:03:03 25 4
gpt4 key购买 nike

我目前正致力于将一些 C 代码翻译成 Python。此代码用于帮助识别由射电天文学中使用的 CLEAN 算法引起的错误。为了进行此分析,必须在特定像素值(由 ANT_pix 给出)处找到强度图、Q 斯托克斯图和 U 斯托克斯图的傅立叶变换值。这些 map 只是 257*257 数组。

下面的代码用 C 运行需要几秒钟,但用 Python 运行需要几个小时。我很确定它经过了非常优化,因为我对 Python 的了解很差。

感谢您提供的任何帮助。

更新 我的问题是是否有更好的方法在 Python 中实现循环以加快速度。我在这里阅读了很多关于 Python 的其他问题的答案,这些问题建议尽可能避免在 Python 中嵌套 for 循环,我只是想知道是否有人知道在没有循环或更好的情况下实现像下面的 Python 代码这样的东西的好方法优化循环。我意识到这可能是一项艰巨的任务!

到目前为止,我一直在使用 FFT,但我的主管想看看 DFT 会产生什么样的差异。这是因为通常情况下,天线位置不会出现在精确的像素值处。使用 FFT 需要四舍五入到最接近的像素值。

我正在使用 Python 作为 CASA,用于减少射电天文数据集的计算机程序是用 Python 编写的,并且在其中实现 Python 脚本比 C 容易得多。

原始代码

def DFT_Vis(ANT_Pix="",IMap="",QMap="",UMap="", NMap="", Nvis=""):

UV=numpy.zeros([Nvis,6])
Offset=(NMap+1)/2
ANT=ANT_Pix+Offset;

i=0
l=0
k=0
SumI=0
SumRL=0
SumLR=0


z=0

RL=QMap+1j*UMap
LR=QMap-1j*UMap

Factor=[math.e**(-2j*math.pi*z/NMap) for z in range(NMap)]

for i in range(Nvis):
X=ANT[i,0]
Y=ANT[i,1]

for l in range(NMap):

for k in range(NMap):

Temp=Factor[int((X*l)%NMap)]*Factor[int((Y*k)%NMap)];

SumI+=IMap[l,k]*Temp
SumRL+=RL[l,k]*Temp
SumLR+=IMap[l,k]*Temp


k=1

UV[i,0]=SumI.real
UV[i,1]=SumI.imag
UV[i,2]=SumRL.real
UV[i,3]=SumRL.imag
UV[i,4]=SumLR.real
UV[i,5]=SumLR.imag
l=1
k=1
SumI=0
SumRL=0
SumLR=0

return(UV)

最佳答案

您可能应该使用 numpy 的傅里叶变换代码,而不是自己编写:http://docs.scipy.org/doc/numpy/reference/routines.fft.html

关于python - Python 中的 DFT 比 C 花费更长的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com