为什么形状(200000,1)的FFT与形状(200000,)的FFT不同?

Dem*_*mis 1 numpy fft

我正在从商业仪器中获取光学OFDR (1,2,3 )数据FFT 。

然而,我花了几天时间困惑为什么 FFT 没有给出预期的结果。原来这是因为我导入的数组具有 shape(20000,1)而不是(20000,). 前者的 FFT(20000,1)返回不变,而具有形状的对象的 FFT(20000,)会产生正确的结果。从概念上讲,这些对我来说似乎是完全相同的数组 - 但实际上它们显然是不同的 FFT 计算。

谁能解释为什么这个看似虚构的维度破坏了我的 FFT?

# Produces bad FFT:
>> np.shape(MeasData)
: (433229, 1)

# Produces correct FFT
>> np.shape(MeasData[:,0])
: (433229,)
Run Code Online (Sandbox Code Playgroud)

第二,空维度意味着什么?也就是说,为什么形状报告为而(2000,)不是(2000)(没有逗号)?

下面是一个图,显示了其中每一个以及相应的傅立叶变换,通过numpy.rfft( MeasData ) (抱歉我不知道如何生成有用的 MWE 数据): MeasData 和 FFT 图

第一个和第二个 (MeasData = [433000,1]) 显示 FFT 根本没有执行任何操作,而第三个和第四个 (MeasData = [433000,]) 显示正确的 FFT。

[400000,1]形状与 不同有何意义[400000,]?看起来很违反直觉。

use*_*ica 5

默认情况下,numpy.fft.rfft对输入的最后一个维度计算 FFT。当您向其传递一个 shape 数组时(20000, 1),它会计算 1 元素向量的 20000 个 FFT,而不是将输入视为 20000 个元素向量来计算单个 FFT。

NumPy 是一个 n 维数组库,而不是矩阵库。第二维长度为 1 的二维数组被认为与一维数组完全不同。如果你想表示一个向量,你几乎应该总是将它表示为一维数组。-shape数组(20000,)是一维的。