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

问题描述 投票:0回答:1

我正在从商业仪器获取光学 OFDR(123)数据的 FFT。

然而,我花了好几天的时间来困惑为什么 FFT 没有给出预期的结果。结果是因为我导入的数组的形状是

(20000,1)
而不是
(20000,)
。前一个
(20000,1)
的 FFT 返回不变,而形状为
(20000,)
的对象的 FFT 会产生正确的结果。 从概念上讲,这些对我来说似乎是完全相同的数组 - 但实际上,它们的 FFT 计算显然不同。

谁能解释一下为什么这个看似想象的维度破坏了我的FFT?

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

# Produces correct FFT
>> np.shape(MeasData[:,0])
: (433229,)

第二,空维度意味着什么?也就是说,为什么形状报告为

(2000,)
而不是
(2000)
(无逗号)?

这是一个显示其中每一个以及相应的傅立叶变换的图,通过

numpy.rfft( MeasData )
获取(抱歉,我不知道如何生成有用的 MWE 数据):

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

形状

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

numpy fft
1个回答
1
投票

默认情况下,

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

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

(20000,)
形状数组是一维的。

© www.soinside.com 2019 - 2024. All rights reserved.