1

这一定是一个愚蠢的问题,但我自己无法弄清楚有什么问题。我想测试 pyfftw 所以我运行了以下代码:

import numpy as np
import pyfftw

a = np.random.randn(2,64,64)
b = np.zeros(2,64,33)*np.complex(0.)

pyfftw.FFTW(a,b,axes = (-2,-1), direction = 'FFTW_FORWARD')

我希望将数组b更改为数组的傅里叶模式a。但事实证明,这b仍然是全零。那么这里有什么问题呢?谁能给个提示?非常感谢。

这是后续行动。感谢 AKX 和 Hamaza 指出我应该运行 execute() 方法来完成 FFT。但是现在还有一个问题。我尝试在自定义函数中调用 pyfftw。输出显示输入数组更改为全零。

def f2fh(f):
    ftmp = np.copy(f)
    nz,nx,ny = f.shape
    nky = ny
    nkx = (nx/2)+1
    fh = np.zeros((nz,nky,nkx))*np.complex(0.)
    print 'ksksks',ftmp.shape,fh.shape,ftmp
    pyfftw.FFTW(ftmp, fh, axes = (-2,-1), direction = 'FFTW_FORWARD').execute()
    print 'a',ftmp
    return fh

输出是 在此处输入图像描述

谁能提示这次出了什么问题?非常感谢...

4

2 回答 2

3

你没有打电话execute()。通过文档

实际的 FFT 或 iFFT 是通过调用该execute()方法来执行的。

execute():执行计划的操作,对输入数组(即FFTW.input_array)进行正确类型的FFT,并将结果放入输出数组(即FFTW.output_array)。

您可能还想使用此处描述的“更简单”的接口:

b = pyfftw.interfaces.numpy_fft.fft(a)

于 2020-10-05T09:10:50.113 回答
1

你需要打电话execute()

pyfftw.FFTW(a,b,axes = (-2,-1), direction = 'FFTW_FORWARD').execute()
于 2020-10-05T09:15:58.477 回答