<p>我目前正在把一些C代码翻译成Python。该代码正被用来帮助识别由射电天文学中使用的CLEAN算法引起的错误。为了分析强度图的傅里叶变换值,必须在特定像素值处找到Q-Stokes-Map和U-Stokes-Map(由ANT_-pix给出)。这些地图只是257*257数组。在</p>
<p>下面的代码用C运行需要几秒钟,而用Python运行则需要几个小时。我很确定它是非常优化的,因为我对Python的了解非常差。在</p>
<p>谢谢你的帮助。在</p>
<p><strong>更新</strong>我的问题是,是否有更好的方法在Python中实现循环,从而加快速度。我在这里读了很多关于Python的问题的答案,这些问题建议尽可能避免在Python中嵌套for循环,我只是想知道是否有人知道一种好的方法来实现下面的Python代码,而不使用循环或使用更好的优化循环。我知道这可能是一个很高的要求!在</p>
<p>到目前为止,我一直在使用FFT,但我的主管想看看DFT会有什么不同。这是因为天线位置通常不会出现在精确的像素值处。使用FFT需要舍入到最接近的像素值。在</p>
<p>我用Python作为CASA,用来减少射电天文数据集的计算机程序是用Python编写的,用它实现Python脚本远比C简单得多</p>
<p><strong>原始代码</strong></p>
<pre><code>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)
</code></pre>