擅长:python、mysql、java
<p><code>numpy</code>中的这些例程当前似乎假定最后一个维度总是最小的。如果这是真的<code>fftn</code>会更快,有时会快很多。你知道吗</p>
<p>也就是说,我得到的这两种方法在性能上的差别要比你小得多(使用python3.7.4,numpy1.17.2)。例如,<code>iterate_fft</code>需要46毫秒,<code>ffn</code>需要50毫秒。但是如果我把轴翻转到<code>(256, 256, 32)</code>,我分别得到55毫秒和40毫秒。用<code>(256, 256, 2)</code>的形状进一步推,我分别得到21ms和4ms。你知道吗</p>
<p>注意,如果性能确实是一个问题,那么在某些情况下,还有其他可用的FFT库<a href="https://stackoverflow.com/q/6365623/1358308">perform better</a>。此外,scipy中的完整fftpack的性能可能与numpy中更有限的代码有很大不同。你知道吗</p>
<p>注意<a href="https://github.com/numpy/numpy/blob/d9b1e32cb8ef90d6b4a47853241db2a28146a57d/numpy/fft/pocketfft.py#L624-L631" rel="nofollow noreferrer">your usage of ^{<cd2>}</a>基本上是:</p>
<pre><code>x = np.random.rand(32, 256, 256)
a = np.fft.fft(x, n=256, axis=2)
a = np.fft.fft(a, n=256, axis=1)
np.testing.assert_allclose(np.fft.fftn(x, axes=(1, 2)), a)
</code></pre>