1D和3D阵列的快速傅立叶变换

时间:2019-09-12 16:02:56

标签: arrays python-3.x fft reshape

我正在使用pyopencl进行N体计算,我需要将我的数据作为一维数组作为某些内核的输入和输出。因此,如果我有2D问题,则可以执行以下操作:1D_arr = numpy.reshape(3D_arr,(Lx Ly)),其中所有粒子的Lx Ly个数。 如何执行一维数组的快速傅立叶变换(fft)(如果可能!),它对应于3D数组的fft(以及之后的ifft)?这两个数组通过现实空间中的重塑变形连接。

import numpy as np
from scipy.fftpack import fftn, fft


Lx = 10 
Ly = 9
Lz = 1
L = Lx * Ly * Lz
Lspec = (2 * Lx - 1) * (2 * Ly - 1) * (2 * Lz - 1)

M1 = np.zeros(L).astype(np.float32)
for i in range(L):
    M1[i] = np.random.random()
M3 = np.zeros((Lx, Ly, Lz))
for z in range(Lz):
    for y in range(Ly):
        for x in range(Lx):
            i = x + Lx * y
            M3[x, y, z] = i
            M1[i] = i
            print(M3[x,y,z], M1[i])


print("________________________")


FM3 = fftn(M3)
FM1 = fftn(M1)

for z in range(Lz):
    for y in range(Ly):
        for x in range(Lx):
            i = x + Lx * y
            i2 = y + Ly * x
            print(FM3[x,y,z], FM1[i2])

我希望FM1和FM3的所有元素都相等,但我不知道如何管理。

0 个答案:

没有答案