【问题标题】:Why does pyfftw output zero?为什么pyfftw输出为零?
【发布时间】:2020-10-05 08:57:03
【问题描述】:

这一定是一个愚蠢的问题,但我自己无法弄清楚哪里出了问题。我想测试 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

输出是

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

【问题讨论】:

    标签: python pyfftw


    【解决方案1】:

    你没有打电话给execute()。通过the docs

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

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

    您可能还想使用over here 中描述的“更简单”的界面:

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

    【讨论】:

    • 您应该将后续问题作为一个单独的问题提出,但文档说:“input_array 和 output_array 应该是 numpy 数组。这些数组的内容将在初始化期间被规划过程破坏。”如果您需要原始内容,请将副本传递给 FFTW。
    • 你也可以调用FFTW object itself(它用一些额外的检查包裹execute)。
    【解决方案2】:

    您需要致电execute()

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

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 2018-09-19
      • 1970-01-01
      • 2017-01-19
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 2020-01-26
      相关资源
      最近更新 更多