星际争霸2Bot训练数据保存报错:请求数组存在不均匀形状
星际争霸2Bot游戏结果保存报错解决方案
报错核心原因
这个错误是因为你尝试保存的数据结构存在维度不一致的问题:前两维是统一的(24,2)形状,但后续子序列的长度不统一,导致无法生成规整的结构化数组(比如numpy数组),和保存路径无关。
具体修复步骤
1. 先定位数据异常点
在保存代码前添加调试代码,找出哪组数据的结构和其他组不一致:
# 假设待保存数据为game_data for i, group in enumerate(game_data): print(f"第{i}组数据: 子序列长度列表 = {[len(sub) for sub in group]}")
运行后查看输出,找到长度和其他组不同的子序列,这就是问题根源。
2. 统一数据维度(二选一)
根据Bot的需求选择适配的处理方式:
- 补全/截断法:将所有子序列统一到相同长度,比如以最长子序列为标准,短的补默认值(如0),长的截断:
# 先找出所有子序列的最大长度 max_sub_len = max([len(sub) for group in game_data for sub in group]) normalized_data = [] for group in game_data: normalized_group = [] for sub in group: # 补全到max_sub_len长度,不足补0 padded_sub = sub + [0]*(max_sub_len - len(sub)) normalized_group.append(padded_sub) normalized_data.append(normalized_group) - 改用异构存储格式:如果不需要规整数组,直接用支持嵌套异构数据的格式(比如JSON)保存:
import json import os save_dir = r"C:\123\train_data" # 确保文件夹存在 if not os.path.exists(save_dir): os.makedirs(save_dir) # 保存为JSON文件 with open(os.path.join(save_dir, "game_result.json"), "w", encoding="utf-8") as f: json.dump(game_data, f, indent=2)
3. 路径合法性验证(补充)
虽然路径不是报错原因,但可以提前处理避免后续问题:
save_dir = r"C:\123\train_data" # 自动创建不存在的文件夹 if not os.path.isdir(save_dir): os.makedirs(save_dir, exist_ok=True)
验证方法
修改后先运行1-2局测试,确认数据能正常保存后再批量运行Bot。
内容的提问来源于stack exchange,提问作者AloKost
相关产品推荐
相关产品推荐

