我正在使用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的所有元素都相等,但我不知道如何管理。