为何形状(200000,1)与(200000,)的FFT结果不同?维度解析
问题解答
1. 两种形状数组的FFT结果差异原因
numpy的rfft(及其他FFT系列函数)默认对最后一个轴执行傅里叶变换:
- 当数组形状为
(N, 1)时,最后一个轴的长度是1。根据FFT定义,单个点的傅里叶变换等于其本身,因此变换结果和原数据完全一致,看起来像“未生效”。 - 当数组形状为
(N,)时,这是一维数组,最后一个轴就是整个序列(长度为N),rfft会正常计算这个长度为N的信号的傅里叶变换,得到预期结果。
你可以通过指定axis参数验证逻辑:对(N,1)形状的数组执行np.rfft(MeasData, axis=0),会得到和(N,)数组一致的正确结果,因为此时是对长度为N的第一个轴做变换。
2. 形状标注(2000,)的含义
在Python中,(2000)只是普通整数,而(2000,)是单元素元组。numpy用元组表示数组形状,一维数组的形状是长度为1的元组,必须加逗号来区分它和仅用于包裹优先级的括号——这是Python的语法规则:单元素元组必须在元素后加逗号,否则括号会被视为语法符号而非元组定义。
直观示例:
>>> type((2000)) <class 'int'> >>> type((2000,)) <class 'tuple'>
numpy数组的shape属性永远是元组,因此一维数组的形状会显示为(N,)而非(N)。
内容的提问来源于stack exchange,提问作者Demis
相关产品推荐
相关产品推荐

