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

无法将训练数据保存至Numpy文件:形状不兼容报错求助

解决numpy保存游戏训练数据时的形状不兼容报错

报错原因

numpy的np.save()要求待保存的数据能转换为形状完全均匀的数组。你的training_data列表中每个元素是[屏幕数组, 输出值],其中屏幕数组是固定的(160,120)二维结构,但如果output的形状/长度不统一,或者直接将嵌套列表转数组时结构存在冲突,就会触发“非均匀形状”的 ValueError。

可行解决方案

方案1:拆分屏幕数据与输出数据,分别保存(推荐)

将屏幕数据和输出数据拆分为两个独立的均匀数组,用np.savez()打包保存(支持一次存储多个数组),既避免形状问题,也方便后续加载使用:

while (True):
    if not paused:
        screen = grab_screen(region=(0, 40, 800, 640))
        screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY)
        screen = cv2.resize(screen, (160, 120))
        keys = key_check()
        output = keys_to_output(keys)
        training_data.append([screen, output])

        if len(training_data) % 100 == 0:
            print(len(training_data))
            # 拆分出屏幕和输出数组
            screens = np.array([item[0] for item in training_data])
            outputs = np.array([item[1] for item in training_data])
            # 用savez打包保存,文件名加上序号区分批次
            np.savez(f'training_batch_{len(training_data)}.npz', screens=screens, outputs=outputs)
            # 清空列表,避免后续重复存储已有数据
            training_data = []

后续加载数据时:

data = np.load('training_batch_100.npz')
screens = data['screens']  # 形状(100, 160, 120)
outputs = data['outputs']  # 形状(100, ...),取决于你的output实际结构

方案2:使用结构化数组统一存储

如果你的output是固定形状的标量或短数组,可以将数据转换为numpy结构化数组,强制统一结构:

while (True):
    if not paused:
        # 省略前面的屏幕处理和输出计算代码
        training_data.append([screen, output])

        if len(training_data) % 100 == 0:
            print(len(training_data))
            # 定义结构化数据类型:屏幕是(160,120)的float32数组,输出是int32标量(根据实际情况调整)
            dtype = [('screen', 'float32', (160, 120)), ('output', 'int32')]
            structured_data = np.array([(item[0], item[1]) for item in training_data], dtype=dtype)
            np.save(file_name, structured_data)
            training_data = []

这种方法适合输出结构固定的场景,但后续数据读取和预处理的灵活性不如方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:35:26