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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:24:00