2017-03-05 6 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の数値に の精度があります。 (LEN(a)はirfftするためのものであり、 同じ理由ようa.shapeが必要である。)は、同じドキュメントから

x.shape説明:

S:intの配列、オプションのShape(各変換軸の長さ) 出力(s [0]は軸0、s [1]は軸1を参照します。 sはまた 最後の 軸を除き、この軸に沿って使用される入力点の数です。入力のs [-1] // 2 + 1点が使用されます。任意の軸に沿って、 sで示される形状が入力の形状よりも小さい場合、 入力が切り取られます。それが大きい場合、入力にはゼロが埋め込まれます。 が指定されていない場合は、 軸で指定された軸に沿った入力の形状が使用されます。

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

関連する問題