【发布时间】: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的文档中,而不是在注释部分.