首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么pyfftw输出0?

为什么pyfftw输出0?
EN

Stack Overflow用户
提问于 2020-10-05 16:57:04
回答 2查看 65关注 0票数 1

这一定是一个愚蠢的问题,但我自己也搞不清楚哪里出了问题。我想测试pyfftw,所以我运行了以下代码:

代码语言:javascript
复制
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。输出显示输入数组已更改为全零。

代码语言:javascript
复制
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

输出为

有没有人能给出一个提示,这一次哪里出了问题?非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2020-10-05 17:10:50

你不能给execute()打电话。通过the docs

通过调用execute()方法来执行实际的

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

您可能还想使用over here中描述的“更简单”的接口

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

票数 3
EN

Stack Overflow用户

发布于 2020-10-05 17:15:58

你需要给execute()打电话。

代码语言:javascript
复制
pyfftw.FFTW(a,b,axes = (-2,-1), direction = 'FFTW_FORWARD').execute()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64205461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档