FFTW3 on complex numpy array directly in scipy.weave.inline
我正在尝试在
1.正向FFT阵列
2. 在傅里叶空间中将阵列乘以线性相位斜坡
3. 逆FFT数组
这个算法很容易在 python 中使用 numpy/scipy 实现,但是对于 256**2 数组来说,每班的速度非常慢(~10 毫秒)。我试图通过使用 scipy.weave.inline 直接从 python 调用 c 代码来加快速度。
我在将复杂的 numpy 数组传递给 FFTW 时遇到了麻烦。 c 代码如下所示:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <fftw3.h> #include <stdlib.h> #define INVERSE +1 fftw_complex *i, *o; i = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * xdim*ydim); pf = fftw_plan_dft_2d(xdim, ydim, i, o, –1, FFTW_PATIENT); # Copy data to fftw_complex array. How to use python arrays directly fftw_execute(pf); /* Mult by linear phase ramp here */ fftw_execute(pi); for (n=0; n<xdim;n++){ fftw_destroy_plan(p); |
所以你可以看到我必须将存储在 numpy 数组 “a” 中的数据复制到 fftw_complex 数组 “i” 中。最后,我必须将结果 “i” 复制到输出 numpy 数组 “b” 中。直接在 fftw 中使用 numpy 数组 “a” 和 “b” 会更有效,但我无法让它工作。
有没有人知道如何让 fftw 直接在
谢谢
根据fftw手册,可以在
在这种情况下,您可以像
这样做时,您必须小心您的数组
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269275.html