2017-03-05 1 views
1

Si la dimension de fin d'un tableau x est impaire, la transformation y = irfftn(rfftn(x)) n'a pas la même forme que la matrice d'entrée. Est-ce par conception? Et si oui, quelle est la motivation? Exemple de code est ci-dessous.Pourquoi irfftn (rfftn (x)) n'est pas égal à 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) 

Répondre

2

Vous devez passer deuxième paramètre x.shape dans votre cas la volonté de code ressemble à:

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

des docs

Cette fonction calcule l'inverse de la N dimensions discret Transformée de Fourier pour une entrée réelle sur un nombre quelconque d'axes dans une matrice de dimension M au moyen de la transformée de Fourier rapide (FFT). En d'autres mots, irfftn (rfftn (a), a.shape) == a à la précision numérique . (Le a.shape est nécessaire comme len (a) est à irfft, et pour la même raison .)

descriptions de x.shape à partir des mêmes documents:

s: séquence d'ints , facultatif Forme (longueur de chaque axe transformé) de la sortie (s [0] correspond à l'axe 0, s [1] à l'axe 1, etc.). s est également le nombre de points d'entrée utilisés le long de cet axe, à l'exception du dernier axe , où s [-1] // 2 + 1 points de l'entrée sont utilisés. Le long de n'importe quel axe, si la forme indiquée par s est inférieure à celle de l'entrée, l'entrée est rognée. Si elle est plus grande, l'entrée est complétée avec des zéros. Si s n'est pas donné, la forme de l'entrée le long des axes spécifiés par axes est utilisée.

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