Python 为什么pyfftw输出为零?

Python 为什么pyfftw输出为零?,python,pyfftw,Python,Pyfftw,这一定是一个愚蠢的问题,但我自己却想不出是什么错了。我想测试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仍然是全零。那么这里出了什么

这一定是一个愚蠢的问题,但我自己却想不出是什么错了。我想测试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
输出是

有人能暗示一下这次出了什么问题吗?非常感谢…

您没有打电话给execute。通过:

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

执行: 执行计划的操作,获取输入数组(即FFTW.input_数组)的正确FFT类型,并将结果放入输出数组(即FFTW.output_数组)

您可能还希望使用以下更简单的界面:

b=pyfftw.interfaces.numpy\u fft.ffta

你不是在叫执行。通过:

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

执行: 执行计划的操作,获取输入数组(即FFTW.input_数组)的正确FFT类型,并将结果放入输出数组(即FFTW.output_数组)

您可能还希望使用以下更简单的界面:

b=pyfftw.interfaces.numpy\u fft.ffta

您需要调用execute

您需要调用execute


您应该将下面的问题作为一个单独的问题提问,但是文档中说:输入数组和输出数组应该是numpy数组。这些阵列的内容将在初始化过程中被规划过程销毁。如果您需要原始内容,请将副本传递给FFTW。您还可以调用which wrapps execute并进行一些附加检查。您应该将后续问题作为一个单独的问题询问,但文档中说:input_数组和output_数组应该是numpy数组。这些阵列的内容将在初始化过程中被规划过程销毁。如果您需要原始内容,请将副本传递给FFTW。您还可以通过一些附加检查调用which wrapps execute。
pyfftw.FFTW(a,b,axes = (-2,-1), direction = 'FFTW_FORWARD').execute()