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

如何将非均匀numpy数组转为方形数组?LunarLander环境PyTorch适配问题

解决方案:处理LunarLander环境reset返回值的问题

问题根源

你遇到的所有错误,核心原因是新版Gym(或Gymnasium)的env.reset()方法返回的是(observation, info)元组,而不是单纯的观测数组。你直接把这个元组当成观测数组处理,才会出现"非均匀数组"的错误——因为元组里包含了一个8维数组和一个空字典,长度为2,根本不是需要的观测数据。

正确步骤

  1. 修正env.reset()的接收逻辑
    把主程序里的observation = env.reset()改成:

    observation, info = env.reset()
    

    只取元组的第一个元素作为实际观测数据,这才是LunarLander环境返回的固定8维均匀数组(形状为(8,)),完全不需要补零或reshape。

  2. 移除多余的补零代码
    LunarLander的观测本身就是8维的一维数组,直接可以转换为PyTorch张量,之前的补零操作完全没必要,直接删掉即可。

  3. 修正智能体的张量转换代码
    确保forward函数里正确处理numpy数组:

    def forward(self, observation):
        # 直接将numpy数组转为张量,无需额外处理
        state = torch.tensor(observation, dtype=torch.float32).to(self.device)
        x = F.relu(self.fc1(state))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
    

    注意指定dtype=torch.float32,和原数组的float32类型匹配。

  4. 验证观测数据
    修正后,打印observation会得到类似这样的8维数组:

    [-0.00508328,  1.4105566 , -0.514903  , -0.01617732,  0.00589709, 0.11663332,  0.        ,  0.        ]
    

    这是标准的均匀形状数组,能直接转为PyTorch张量。

错误原因复盘

你之前的补零代码报错,是因为你把(数组, 字典)的元组当成了观测数组,len(observation)返回2,计算出n=2、padding=2,但np.pad无法处理包含数组和字典的元组,所以抛出"非均匀形状"的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:35:05