全频率阵列重建numpy.fft.rfftn

2024-10-02 14:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个真正有价值的灰度三维图像,分辨率行x列x深度。我用freq = numpy.fft.rfftn(myImage)计算图像的dft

返回的数组freq是resolution:rows x cols x deps/2+1。我想重构freq,就好像它是numpy.fft.fftn(myImage)的输出,也就是说,我希望freq的维数是rows x cols x deps。在

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

我可以用一个循环来重建全频阵列,但这太慢了,但是我很难找到正确的方法来进行阵列切片。在

谢谢!在

仅供参考,我需要完整的数组,因为我将按元素的方式将它与另一个全大小行x cols x deps的数组相乘,我不能假设数组有任何结构(如对称性)使我不必重建全频数组。在


Tags: deps图像fftnumpyk2k1数组rows
1条回答
网友
1楼 · 发布于 2024-10-02 14:23:49

我明白了!在

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)

相关问题 更多 >