3D DFT를 구현하려고하지만 약간의 문제가 있습니다. 내가해야한다고 믿는 것은 3 방향의 1D DFT를 연속적으로하는 것입니다.3D DFT를 구현할 때 결과를 일치시킬 수 없습니다.
def dft3d(self, real3d, img3d, nx, ny, nz, dir):
#Transform depth
for i in range(nx):
for j in range(ny):
real = numpy.zeros(nz)
img = numpy.zeros(nz)
for k in range(nz):
real[k] = real3d[i][j][k]
img[k] = img3d[i][j][k]
self.dft(real, img, nz, 1) #This was indented too much. It should work now.
for k in range(nz):
real3d[i][j][k] = real[k]
img3d[i][j][k] = img[k]
#Transform cols
for k in range(nz):
for i in range(nx):
real = numpy.zeros(ny)
img = numpy.zeros(ny)
for j in range(ny):
real[j] = real3d[i][j][k]
img[j] = img3d[i][j][k]
self.dft(real, img, ny, 1)
for j in range(ny):
real3d[i][j][k] = real[j]
img3d[i][j][k] = img[j]
#Transform rows
for j in range(ny):
for k in range(nz):
real = numpy.zeros(nx)
img = numpy.zeros(nx)
for i in range(nx):
real[i] = real3d[i][j][k]
img[i] = img3d[i][j][k]
self.dft(real, img, nx, 1)
for i in range(nx):
real3d[i][j][k] = real[i]
img3d[i][j][k] = img[i]
내가 파이썬에서이 버전에서이 내장되어 있습니다 알고 있지만, 나는 그를 사용할 수 없습니다 : 1 차원 DFT가 올바른지 가정하면,이 코드에 어떤 문제가 있는지 확인할 수 있습니다. 파이썬에서 알고리즘을 테스트하고 있으므로 알고리즘과 내장 알고리즘의 결과를 비교할 수 있습니다. 지금까지 내가 1D와 2D 변환 모두에 대해 잘 작동한다고 말할 수 있었지만 일단 3D로 확장하면 결과가 더 이상 일치하지 않습니다. 누가 잘못되었는지 아는 사람 있습니까?
오 마이. 그것은 어리석은 무엇이어야했다. 정말 고맙습니다. 당신은 오늘의 영웅입니다. numpy에 대한 도움말을 주셔서 감사합니다. – Feryla
numpy 축을 굴려 3 개의 별도 루프를 작성할 필요가 없습니다. – DSM