2016-12-07 5 views
1

np.fft.fftn 및 2D numpy 배열 배열을 효율적으로 처리하려고합니다. V0은 모양이 인 배열이며 첫 번째 차원 인 V0에서 각 2D 배열에 대해 FFT를 수행하고 싶습니다. 파이썬 : numpy 배열 목록 위에 numpy fftn

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 

그래서 어떻게 올바르게 수행 할 수 있습니다 내가 여기서 뭘하려고하는 것은 V0의 첫 번째 축에 걸쳐 반복 사이의 비교, 전체 다차원 배열을 통해 FFT를 할 수있는 순진한 시도와 비교하는 것입니다?

+1

시도를 = 0, 표준 = None ')' – Chr

+0

'V0fftdirect = np.fft.fftn (V0, s = None, axes = 0, norm = None)'하면 에러가 발생합니다 :'TypeError :'numpy.int64 '객체가 반복 가능하지 않습니다. – Ohm

+1

죄송합니다 'numpy.fft.fftn (a, s = None, axes = (0), norm = None)' – Chr

답변

1
  • for 루프에 np.fft.fftnnp.fft.fft2으로 바꿉니다.
+0

나는 그것이 'np.fft.fftn (V0, axes = (- 2, -1))'이어야한다고 생각한다. – Ohm

0

V0fftdirect = np.fft.fft2(V0)numpy.fft.fftn(a, s=None, axes=(-2, -1), norm=None)이 작업 한 :

  • fftn 축 지정 축, 축`numpy.fft.fftn (A, S = 없음을 지정하여

    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