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