2017-03-05 5 views
1

Wenn die nacheilende Dimension eines Arrays x ungerade ist, hat die Transformation y = irfftn(rfftn(x)) nicht die gleiche Form wie das Eingabearray. Ist das Absicht? Und wenn ja, was ist die Motivation? Beispielcode ist unten.Warum ist irfftn (rfftn (x)) nicht gleich 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) 

Antwort

2

Sie benötigen x.shape in Ihrem Fall zweite Parameter übergeben wird der Code wie folgt aussieht:

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)) 

von den docs

Diese Funktion der Umkehrung der N-dimensionalen berechnet diskret Fourier-Transformation für reale Eingabe über eine beliebige Anzahl von Achsen in einem M-dimensionalen Array mittels der Fast-Fourier-Transformation (FFT). In anderen Worten, irfftn (rfftn (a), a.shape) == a bis innerhalb von numerischen Genauigkeit. (Das ist notwendig, wie a.shape len (a) für irfft ist, und für den gleichen Grund.)

x.shape Beschreibungen von derselben docs:

s: Sequenz von ints , optional Form (Länge jeder transformierten Achse) des Ausgangs (s [0] bezieht sich auf Achse 0, s [1] auf Achse 1 usw.). s ist auch die Anzahl der Eingabepunkte entlang dieser Achse, mit Ausnahme der letzten Achse, wobei s [-1] // 2 + 1 Punkte des Eingangs verwendet werden. Entlang einer beliebigen Achse, , wenn die durch s angezeigte Form kleiner ist als die des Eingangs, wird der Eingang beschnitten. Wenn es größer ist, wird die Eingabe mit Nullen aufgefüllt. Wenn s nicht angegeben ist, wird die Form des Eingangs entlang der durch Achsen angegebenen Achsen verwendet.

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

Verwandte Themen