2016-12-07 21 views
1

我試圖高效地np.fft.fftn和2D numpy數組的數組。 V0是一個形狀爲(nvar,nx,ny)的數組,我想對來自第一維V0的每個2D陣列執行FFT。我想在這裏做的是超過V0第一軸迭代之間進行比較,並將其與天真的企圖整個多維數組在做FFT比較:Python:numpy fftn在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 

所以,我該怎麼做是正確的?

+1

嘗試通過指定軸'numpy.fft.fftn(A,S =無,軸= 0,範數=無)' – Chr

+0

嘗試這個'V0fftdirect = np.fft.fftn(V0,s = None,axes = 0,norm = None)'導致錯誤:'TypeError:'numpy.int64'對象不可迭代' – Ohm

+1

對不起,'axes'應該是一個序列:'numpy.fft.fftn(a,s = None,axes =(0),norm = None)' – Chr

回答

1
  • 在for循環中用np.fft.fft2代替np.fft.fftn
  • 指定fftn軸:numpy.fft.fftn(a, s=None, axes=(-2, -1), norm=None)
+0

我認爲它應該是'np.fft.fftn(V0,axes =( - 2,-1))' – Ohm

0

V0fftdirect = np.fft.fft2(V0)做了工作:

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