【问题标题】:numpy.fft.irfft: Why is len(a) necessary?numpy.fft.irfft:为什么需要 len(a)?
【发布时间】:2018-10-01 15:31:57
【问题描述】:

documentation for numpy.fft.irfft, the inverse discrete Fourier transform for real input, 状态

此函数计算一维 n 点的逆 由rfft 计算的真实输入的离散傅里叶变换。其他 的话,irfft(rfft(a), len(a)) == a 在数值精度范围内。 (看 下面的注释说明为什么这里需要len(a)。)

但是,注释部分似乎没有说明为什么在这种情况下需要指定len(a)。事实上,即使省略长度,一切似乎也能正常工作:

numpy.random.seed(123456)
a = numpy.random.rand(20)
# array([0.12696983, 0.96671784, 0.26047601, 0.89723652, 0.37674972,
#        0.33622174, 0.45137647, 0.84025508, 0.12310214, 0.5430262 ,
#        0.37301223, 0.44799682, 0.12944068, 0.85987871, 0.82038836,
#        0.35205354, 0.2288873 , 0.77678375, 0.59478359, 0.13755356])
numpy.fft.irfft(numpy.fft.rfft(a))
# array([0.12696983, 0.96671784, 0.26047601, 0.89723652, 0.37674972,
#        0.33622174, 0.45137647, 0.84025508, 0.12310214, 0.5430262 ,
#        0.37301223, 0.44799682, 0.12944068, 0.85987871, 0.82038836,
#        0.35205354, 0.2288873 , 0.77678375, 0.59478359, 0.13755356])

我可以在调用numpy.fft.rfft 时省略len(a) 吗?

【问题讨论】:

  • "如果n为偶数,则变换轴的长度为(n/2)+1。如果n为奇数,则长度为(n+1)/2。":所以返回rfft 的长度不能与 a 的长度相同。也许尝试使用小于 20 的值。
  • Jean-François 是对的:试试a = numpy.random.rand(21)。如果不指定len(a),则返回20个值,而不是21个。
  • irfft 文档上的“请参阅下面的注释”评论具有误导性,因为 @Jean-FrançoisFabre 提到的解释实际上是在 rfft 的文档中,而不是在注释部分.

标签: python numpy fft


【解决方案1】:

如 cmets 所示,如果长度为偶数,则省略长度有效,但如果长度为奇数则无效:

numpy.random.seed(123456)
a = numpy.random.rand(21)
# array([0.12696983, 0.96671784, 0.26047601, 0.89723652, 0.37674972,
#        0.33622174, 0.45137647, 0.84025508, 0.12310214, 0.5430262 ,
#        0.37301223, 0.44799682, 0.12944068, 0.85987871, 0.82038836,
#        0.35205354, 0.2288873 , 0.77678375, 0.59478359, 0.13755356,
#        0.85289978])
numpy.fft.irfft(numpy.fft.rfft(a))
# array([0.24111601, 0.90078174, 0.37803686, 0.86982605, 0.38581891,
#        0.29202917, 0.72002065, 0.59446031, 0.23485829, 0.55698438,
#        0.42253411, 0.26457788, 0.49961714, 1.06138356, 0.45849842,
#        0.22863701, 0.68431715, 0.73579194, 0.14511054, 0.82140976])

numpy.fft.rfftnumpy.fft.irfft 的返回值的文档解释了为什么会发生这种情况,尽管对 numpy.fft.irfft 的“注释”部分的引用仍然具有误导性:

numpy.fft.rfft(a,n=None,axis=-1,norm=None)

返回:

out : 复杂的 ndarray
截断或补零的输入,沿轴变换 由 axis 指示,如果未指定 axis,则为最后一个。如果 n 为偶数,变换后的轴长度为(n/2)+1。如果 n 为奇数,则长度为(n+1)/2


numpy.fft.irfft(a, n=None, axis=-1, norm=None)

返回:

输出:ndarray
截断或补零的输入,沿 axis 指示的轴转换,如果未指定 axis,则为最后一个。变换轴的长度是 n,或者,如果 n 没有给出,2*(m-1) 其中m 是输入的变换轴的长度。要获得奇数个输出点,必须指定 n

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多