2017-03-05 126 views
1

如果數組x的尾部維數爲奇數,則變換y = irfftn(rfftn(x))的形狀與輸入數組的形狀不同。這是設計嗎?如果是這樣,動機是什麼?示例代碼如下。爲什麼irfftn(rfftn(x))不等於x?

import numpy as np 

shapes = [(10, 10), (11, 11), (10, 11), (11, 10)] 

for shape in shapes: 
    x = np.random.uniform(0, 1, shape) 
    y = np.fft.irfftn(np.fft.rfftn(x)) 
    if x.shape != y.shape: 
     print("expected shape %s but got %s" % (shape, y.shape)) 

# Output 
# expected shape (11, 11) but got (11, 10) 
# expected shape (10, 11) but got (10, 10) 

回答

2

你需要傳遞的第二個參數x.shape 你的情況的代碼將看起來像:

import numpy as np 

shapes = [(10, 10), (11, 11), (10, 11), (11, 10)] 

for shape in shapes: 
    x = np.random.uniform(0, 1, shape) 
    y = np.fft.irfftn(np.fft.rfftn(x),x.shape) 
    if x.shape != y.shape: 
     print("expected shape %s but got %s" % (shape, y.shape)) 

從文檔

此函數計算N維的逆離散 通過快速傅里葉變換對M維數組中的任意數量的軸進行實數輸入的傅里葉變換(FFT)。在 之後,irfftn(rfftn(a),a.shape)== a的數值爲 的精度。 (該a.shape是必要像LEN(a)是用於irfft,以及用於 同樣的原因)。來自同一文檔

x.shape描述:

S:整數的序列,輸出(s [0]的可選形狀(每個變換軸的長度) 指的是軸0,s [1]指向軸1等)。 s也是 沿着該軸使用的輸入點的數量,除了最後的 軸,其中s [-1] // 2 + 1點的輸入被使用。沿任意軸輸入 如果由s指示的形狀小於輸入的形狀,則會裁剪輸入。如果它較大,輸入將填充零。如果沒有給出 s,則使用沿着由 軸指定的軸輸入的形狀。

https://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.irfftn.html

相關問題