2016-12-07 1 views
1

J'essaie efficacement np.fft.fftn et tableau de tableaux numpy 2D. V0 est un tableau de la forme (nvar,nx,ny), et je voudrais effectuer FFT sur chaque tableau 2D de la première dimension de V0. Ce que j'ai essayé de faire ici est de comparer entre itération sur le premier axe de V0, et le comparer avec une tentative naïve de faire une FFT sur l'ensemble de tableau multidimensionnel:Python: numft fftn sur une liste de tableau numpy

In [45]: import numpy as np 

In [46]: V0 = np.random.random((3,128,128)) 

In [47]: V0fft = [] 

In [48]: for i in xrange(V0.shape[0]): 
    ...:  V0fft.append(np.fft.fftn(V0[i])) 
    ...:  

In [49]: V0fftdirect = np.fft.fftn(V0) 

In [50]: np.amax(np.abs(V0fft - V0fftdirect)) 
Out[50]: 16366.207818488827 

Alors, comment puis-je le faire correctement?

+1

Essayez en spécifiant l'axe 'numpy.fft.fftn (a, s = Aucun, axes = 0, norme = Aucune) ' – Chr

+0

Essayer ceci' V0fftdirect = np.fft.fftn (V0, s = Aucun, axes = 0, norme = Aucun) 'mène à une erreur:' TypeError: 'l'objet' numpy.int64 'n'est pas itérable' – Ohm

+1

Désolé , 'axes' devrait être une séquence:' numpy.fft.fftn (a, s = Aucun, axes = (0), norm = None) ' – Chr

Répondre

1
  • Remplacez np.fft.fftn par np.fft.fft2 dans la boucle for.
  • l'axe Spécifiez fftn: numpy.fft.fftn(a, s=None, axes=(-2, -1), norm=None)
+0

Je pense qu'il devrait plutôt être 'np.fft.fftn (V0, axes = (- 2, -1))' – Ohm

0

V0fftdirect = np.fft.fft2(V0) a fait le travail:

In [93]: import numpy as np 

In [94]: V0 = np.random.random((3,128,128)) 

In [95]: V0fftfor = [] 

In [96]: for i in xrange(V0.shape[0]): 
    ...:  V0fftfor.append(np.fft.fftn(V0[i])) 
    ...:  

In [97]: V0fftdirect = np.fft.fft2(V0) 

In [98]: np.amax(np.abs(V0fftfor - V0fftdirect)) 
Out[98]: 0.0