我编写了一个函数,该函数返回网格的快速四变换的实部。
def take_FFT(x):
# some arbitrary field for a 1D grid
y = abs(1.0/x)
# compute FFT (in general multi-dimensional) array of real numbers
y_k = np.fft.rfftn(y)
#compute the inverse FFT
y_invk = np.fft.irfftn(y_k)
return y,y_k, y_invk # return fourier transform and inv transform
# initialize sample x
x_test = np.arange(-5,5,0.001)
field,FFT_test, inv_test = take_FFT(x_test)
如何制作合适的新“ x数组”以针对FFT进行绘制?我不清楚如何制作一个长度=(n / 2)+1的数组,就像np.fft.irfftn返回的数组
答案 0 :(得分:0)
欢迎来到StackOverflow,@ Messier!
如果我正确理解了您的问题,那么您想slice
和numpy.array
。
假设我们有一个numpy.array
arr
,其长度为N
。然后将其切成最大长度M
(例如M<=N
)或最大切成(N/2)+1
:
sliced_arr = arr[:M]
slice_half = arr[:N//2+1]
在python
版3
或更高版本中,N//2
执行整数除法。
答案 1 :(得分:0)
获取np.fft.rfft
使用的频率数组的最简单方法是利用方便的辅助函数np.fft.rfftfreq
:
freqs = np.rfftfreq(x_test)
np.fft.rfftn
的多维等效项稍微复杂一些。您将需要获取每个轴上的频率,然后使用np.meshgrid
:
per_axis_freq = [np.fft.fftfreq(N) for N in x_test.shape[0:-1]]
per_axis_freq.append(np.fft.rfftfreq(x_test.shape[-1]))
freqs = np.meshgrid(*per_axis_freq[::-1])