numpy.fft.rfftn之后的全频阵列重建

时间:2014-08-05 19:45:03

标签: python numpy dft slice

我有一个真正有价值的灰度3D图像,分辨率为行x cols x deps。我使用freq = numpy.fft.rfftn(myImage)

获取图像的dft

返回的数组freq是分辨率:rows x cols x deps / 2 + 1.我想重建freq,好像它是numpy.fft.fftn(myImage)的输出,也就是说,我想要freq的维度是行x cols x deps。

我知道实值dft的对应关系是X_(k1,k2,k3)= X * _(N1-k1,N2-k2,N3-k3)其中*是共轭转置。

我可以使用循环重建完整的freq数组,但这太慢了,但我无法通过数组切片找出正确的方法。

谢谢!

仅供参考,我需要完整的数组,因为我将元素明智地将它与另一个全尺寸行x cols x deps数组相乘,我不能假设数组有任何结构(如对称性),这对我来说是不必要的重建完整的频率数组。

1 个答案:

答案 0 :(得分:0)

我明白了!

import numpy as np
import time

rows = 181
cols = 217
deps = 181

jac_k = np.random.rand(rows, cols, deps)*5

prev = time.time()
fft1 = np.fft.fftn(jac_k)
print time.time() - prev

prev = time.time()
fft2 = np.fft.rfftn(jac_k)

if deps%2 == 0:
    fft2Star = np.conj(fft2[:, :, -2:0:-1])
else:
    fft2Star = np.conj(fft2[:, :, -1:0:-1])

fft2Star[1::, :, :] = fft2Star[:0:-1, :, :]
fft2Star[:, 1::, :] = fft2Star[:, :0:-1, :]

fft2 = np.concatenate( (fft2, fft2Star), axis=2)
print time.time() - prev

print np.linalg.norm(fft1 - fft2)