You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对一维数组用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:00:08