对一维数组用fft.fft与重塑为二维用fft.fft2的差异探究
一维FFT与二维FFT的差异解析
核心差异本质
fft.fft是对一维序列执行全局离散傅里叶变换(DFT),而fft.fft2是对二维数组执行二维离散傅里叶变换——本质是先对数组的每个行(或列)做一维FFT,再对变换结果的每个列(或行)做一维FFT,二者的计算维度、逻辑完全不同。
结合示例具体分析
用你给出的代码示例拆解计算过程:
import numpy as np from scipy.fft import fft, fft2 a = np.array([1, 2, 3, 4]) b = np.array([[1,2], [3, 4]]) a1 = fft(a) b1 = fft2(b)
1. 一维FFT(fft.fft(a))的计算
直接对一维序列[1,2,3,4]执行DFT,根据一维DFT公式计算结果为:
a1 = array([10. +0.j, -2. +2.j, -2. +0.j, -2. -2.j])
2. 二维FFT(fft.fft2(b))的计算
分两步执行二维DFT:
- 第一步:对每一行做一维FFT
行[1,2]的FFT结果:[3, -1]
行[3,4]的FFT结果:[7, -1]
得到中间矩阵:[[3, -1], [7, -1]] - 第二步:对中间矩阵的每一列做一维FFT
列[3,7]的FFT结果:[10, -4]
列[-1,-1]的FFT结果:[-2, 0]
最终结果:
b1 = array([[10. +0.j, -2. +0.j], [-4. +0.j, 0. +0.j]])
差异原因总结
- 计算维度不同:一维FFT仅在单个维度上完成全局变换;二维FFT是在两个维度上依次做局部+跨维度的变换。
- 数学定义不同:一维DFT是单变量的求和运算,二维DFT是对行、列两个变量的双重求和运算,公式逻辑存在本质区别。
- 频率分解逻辑不同:一维FFT提取的是整个序列的全局频率特征;二维FFT提取的是二维空间中行、列两个方向的联合频率特征,二者的输出结果不具备直接可比性。
内容的提问来源于stack exchange,提问作者Sil
相关产品推荐
相关产品推荐

