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

np.stack报ValueError: need at least one array to stack错误排查

问题原因及修复方案

核心错误:preprocess函数行列索引混淆

你当前的preprocess函数中错误使用了行切片代替列索引,直接导致标记列数值被篡改,后续序列切分逻辑完全不触发:

# 原错误写法
def preprocess(self, data):
    self.maxZ = np.max(data[:2]) # 此处取的是前2行的所有列最大值,不是第2列(Z轴)
    data[:2] = data[:2]/self.maxZ # 仅修改前2行所有列的值
    data[:0] = data[:0]/1525 # 空行切片,无任何执行效果
    data[:1] = data[:1]/2740 # 仅修改前1行所有列的值
    return data

你原本要实现的是按列归一化,正确写法如下:

# 修复后写法
def preprocess(self, data):
    # iloc[:, 列索引] 才是取指定列所有行的写法
    self.maxZ = np.max(data.iloc[:,2]) 
    print(self.maxZ)
    data.iloc[:,2] = data.iloc[:,2]/self.maxZ # Z轴列归一化
    data.iloc[:,0] = data.iloc[:,0]/1525 # X轴列归一化
    data.iloc[:,1] = data.iloc[:,1]/2740 # Y轴列归一化
    return data

原错误写法会导致你用来判断新序列的第3列(索引3)的标记值1被错误做了除法运算,转int后变为0,if int(df_arr.iloc[i,3])==1的条件永远不触发,后续append逻辑完全不会执行,最终列表为空。

其他可能的排查点

  • 确认原始CSV文件的第4列(对应索引3)确实存在值为1的行,标记新序列的起始/结束位置
  • 确认你传入的seq_len参数值小于单个序列的长度,只有当切出的seq.shape[0] >= seq_len +1时才会进入while循环执行append操作
  • 确认类的__init__方法中已经初始化了self.X、self.X_raw、self.labels三个空列表,避免append操作失败
  • 调试时可以将verbose参数设为True,查看打印的数据集形状、序列加载数量是否符合预期,也可以在if int(df_arr.iloc[i,3])==1分支中加打印,确认是否成功触发了序列切分逻辑。

内容的提问来源于stack exchange,提问作者cxxx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:15:02