使用pad_sequences触发IndexError错误的解决方法
修复pad_sequences()的IndexError问题
错误原因
你的x00_1是形状为(1, 389, 39)的3维数组,当前代码存在两个核心问题:
- 若
i不等于0,x00_1[i]会直接触发索引越界(因为第一维仅包含1个元素); - 即使
i=0,x00_1[0]是(389, 39)的2维数组,传入pad_sequences后会被误判为389个长度为39的一维序列,pad后输出形状为(389, 128),既不符合你“将长度389的39维序列pad到128长度”的需求,还会因形状不匹配触发索引错误。
修复代码
如果你需要将x00_1中唯一的样本(形状(389, 39))在序列长度维度(即389对应的维度)pad为(128, 39),按以下方式修改代码:
from tensorflow.keras.utils import pad_sequences # 取出x00_1中的唯一样本,包装成列表传入pad_sequences padded_result = pad_sequences([x00_1[0]], padding='post', maxlen=128, dtype='float32') # padded_result形状为(1, 128, 39),提取第一个元素得到目标形状(128, 39) input_x[i] = padded_result[0]
注意事项
- 确保
i的取值在input_x的有效索引范围内,比如input_x的长度至少为i+1,且每个元素的形状为(128, 39); pad_sequences的输入应为样本列表,当单个样本是二维数组(序列长度+特征维度)时,必须将其放入列表中,否则函数会错误地把特征维度当成序列长度处理。
内容的提问来源于stack exchange,提问作者Vina
相关产品推荐
相关产品推荐

