擅长:python、mysql、java
<p>我不是FFT的专家,但我的理解是FFT只是一种快速计算DFT的方法。所以对我来说,你的问题听起来像是在尝试编写一个气泡排序算法,看看它是否比快速排序给出了更好的答案。它们都是排序算法,结果是一样的!在</p>
<p>所以我质疑你的基本前提。我想知道你是否可以改变你的数据四舍五入,从SciPy FFT代码得到同样的结果。在</p>
<p>另外,根据我的DSP教科书,FFT可以产生比计算DFT更精确的答案,这仅仅是因为浮点运算是不精确的,而且FFT在寻找正确答案的过程中调用的浮点运算更少。在</p>
<p>如果您有一些工作的C代码可以完成所需的计算,那么您可以始终包装C代码,以便从Python调用它。此处讨论:<a href="https://stackoverflow.com/questions/1942298/wrapping-a-c-library-in-python-c-cython-or-ctypes">Wrapping a C library in Python: C, Cython or ctypes?</a></p>
<p>回答您的实际问题:正如@ZoZo123所指出的,从<code>range()</code>更改为{<cd2>}将是一个巨大的胜利。使用<code>range()</code>,Python必须构建一个数字列表,然后在完成后销毁该列表;使用<code>xrange()</code>Python只需创建一个迭代器,每次生成一个数字。(但是请注意,在python3.x中,<code>range()</code>生成一个迭代器,并且没有<code>xrange()</code>。)</p>
<p>另外,如果此代码不必与其余代码集成,则可以尝试在PyPy下运行此代码。这正是pypyy可以优化的代码类型。PyPy的问题是,当前您的项目必须是“纯”Python,而且看起来您使用的是NumPy。(有一些项目可以让NumPy和PyPy一起工作,但是还没有完成)<a href="http://pypy.org/" rel="nofollow noreferrer">http://pypy.org/</a></p>
<p>如果这段代码需要与其他代码集成,那么我认为您需要看看Cython(正如@Krzysztof Rosiêski所指出的)。在</p>