使用numpy进行快速傅立叶变换时将输入数组加倍

时间:2019-02-20 21:52:38

标签: python numpy fft

我编写了一个函数,该函数返回网格的快速四变换的实部。

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返回的数组

2 个答案:

答案 0 :(得分:0)

欢迎来到StackOverflow,@ Messier!

如果我正确理解了您的问题,那么您想slicenumpy.array

假设我们有一个numpy.array arr,其长度为N。然后将其切成最大长度M(例如M<=N)或最大切成(N/2)+1

sliced_arr = arr[:M]
slice_half = arr[:N//2+1]

python3或更高版本中,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])