Python 为什么len(a)是必要的?

Python 为什么len(a)是必要的?,python,numpy,fft,Python,Numpy,Fft,美国 此函数用于计算一维n点的倒数 由计算得到的实际输入的离散傅里叶变换。换句话说 文字,irfftrffta,lena==a,在数值精度范围内。看见 下面的注释解释了为什么这里需要lena 然而,注释部分似乎没有说明为什么在这种情况下有必要指定lena。事实上,即使忽略长度,一切似乎都正常工作: numpy.random.seed(123456) a = numpy.random.rand(20) # array([0.12696983, 0.96671784, 0.26047601, 0.8

美国

此函数用于计算一维n点的倒数 由计算得到的实际输入的离散傅里叶变换。换句话说 文字,irfftrffta,lena==a,在数值精度范围内。看见 下面的注释解释了为什么这里需要lena

然而,注释部分似乎没有说明为什么在这种情况下有必要指定lena。事实上,即使忽略长度,一切似乎都正常工作:

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时忽略lena吗?

如注释所示,如果长度为偶数,则忽略长度有效,但如果长度为奇数,则忽略长度无效:

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.irfft的“注释”部分仍然存在误导,但的返回值文档和解释了发生这种情况的原因:

numpy.fft.rffta,n=None,轴=-1,norm=None

返回:

出:复杂的Ndaray 沿轴变换的截断或零填充输入 由轴指示,如果未指定轴,则为最后一个。如果 n为偶数,变换轴的长度为n/2+1。如果n为奇数,则长度为n+1/2

numpy.fft.irffta,n=None,轴=-1,norm=None

返回:

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


如果n为偶数,则变换轴的长度为n/2+1。如果n为奇数,则长度为n+1/2.:因此rfft返回的长度不能与a相同。也许尝试使用小于20的值。Jean François是对的:尝试使用a=numpy.random.rand21。如果不指定lena,它将返回20个值,而不是21个值。不过,下面关于irfft文档的See注释有误导性,因为@Jean Françoisfare提到的解释实际上在rfft文档中,而不是注释部分。