Python中如何用for循环将多组FFT结果存入大小未知的矩阵?
报错原因
你将yf定义为Python原生空列表,原生列表不支持[行, 列]这种Numpy风格的二维元组索引,这是触发TypeError的直接原因。
你注释里的yf[ii][:]写法也无法直接运行,空列表不存在索引为ii的元素,无法对未创建的位置直接赋值。
M值的确定规则
使用rfft处理长度为N的实数序列时,输出长度M固定为N//2 + 1,属于固定可计算值,不需要预估。
正确解决方法
方法1:预分配Numpy数组(性能最优)
提前计算M值,直接初始化对应大小的复数数组存储结果:
import numpy as np from scipy.fft import rfft, rfftfreq a = np.linspace(1,30,30).reshape(3,10) N = a.shape[1] # 单轴的采样点数量 M = N // 2 + 1 # rfft输出的固定长度 # 初始化3行M列的复数数组 yf = np.zeros((3, M), dtype=np.complex_) for ii in range(3): yf[ii, :] = rfft(a[ii, :])
方法2:直接调用rfft的axis参数(最简洁)
scipy.fft.rfft本身支持指定运算维度,不需要手动写循环,一行即可得到3xM的结果数组:
yf = rfft(a, axis=1)
方法3:列表暂存后转数组(无需提前算大小)
如果不想提前计算M值,可以先把每个轴的FFT结果append到列表里,最后统一转成Numpy数组:
yf_list = [] for ii in range(3): yf_list.append(rfft(a[ii, :])) yf = np.array(yf_list)
内容的提问来源于stack exchange,提问作者melati_putih
相关产品推荐
相关产品推荐

