【发布时间】:2020-01-20 09:56:14
【问题描述】:
我想计算几个图像的傅立叶变换。
因此,我将 numpy 的 fft.fftn 与暴力循环进行基准测试。
这是我用来对这两种方法进行基准测试的代码(在 jupyter 笔记本中):
import numpy as np
x = np.random.rand(32, 256, 256)
def iterate_fft(arr):
k = np.empty_like(arr, dtype=np.complex64)
for i, a in enumerate(arr):
k[i] = np.fft.fft2(a)
return k
k_it = iterate_fft(x)
k_np = np.fft.fftn(x, axes=(1, 2))
np.testing.assert_allclose(k_it.real, k_np.real)
np.testing.assert_allclose(k_it.imag, k_np.imag)
%%timeit
k_it = iterate_fft(x)
输出:63.6 ms ± 1.23 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
k_np = np.fft.fftn(x, axes=(1, 2))
输出:122 ms ± 1.79 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
为什么会有这么大的差异?
【问题讨论】:
-
我在
numpy中打开了一个 GitHub issue 以了解他们对此的看法。
标签: python numpy profiling fft