我有一个真实值的灰度3D图像,分辨率行x色x深。我用freq = numpy.fft.rfftn(myImage)
返回的数组freq是分辨率:行数x颜色x深度/2 + 1。我想重建freq,就像它是numpy.fft.fftn(myImage)
的输出一样,也就是说,我想让freq的维度是行x colx depth。
我知道实值dft的对应关系是X_(k1,k2,k3) = X*_(N1-k1,N2-k2,N3-k3)其中*是共轭转置
我可以使用循环重建完整的频率阵列,但这太慢了,但我很难找出正确的方法来做它与数组切片。
谢谢!
仅供参考,我需要完整的数组,因为我将元素明智地将它与另一个全尺寸行x cols x depth的数组相乘,我不能假设数组有任何结构(如对称),这将使我没有必要重建完整的频率数组。
我明白了!
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)