将<class'list'=“”>转换为numpy.ndarray

时间:2017-10-10 09:10:19

标签: python opencv numpy openai-gym

我对python有点新,我正在使用OpenAI的miniWOB。我想用cv2打印出我对我的经纪人的观察结果。但真的没关系。我的问题是我不确切知道从健身房收到哪种数据类型用于我的“观察”。但我希望它是一个简单的3Dimensional numpy数组。我可以使用cv2打印出这种格式。所以任何人都可以帮我转换我的&lt; class'list&gt;观察到:&lt;类型nunpy.ndarray&gt;?我已经尝试过observe = np.asarray(观察),但后来我收到了这个错误:“mat data type = 17”。

import cv2
import random
import gym
import universe
import go_vncdriver
import numpy as np
def main():
   env = gym.make('wob.mini.ClickTest-v0')
   env.configure(remotes=1)  # create one flashgames Docker container
   observation = env.reset()
   while True:
       env.render()
       x = 110
       y = 270

        action_n = [universe.spaces.PointerEvent(x, y, 1), universe.spaces.PointerEvent(x, y, 0),
            universe.spaces.PointerEvent(x, y, 1)]

         action_n = [action_n for ob in observation]
         observation, reward_n, done_n, info = env.step(action_n)

         observation = np.asarray(observation) #this one converts to nd array but then I got the mat data type = 17 error
         if (observation != None):
            print(type(observation))
            cv2.imshow('pong voor net', observation)
            cv2.waitKey(0)
            cv2.destroyAllWindows()
main()

我收到了这个:

    [{'vision': array([[[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ..., 
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ..., 
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ..., 
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   ..., 
   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ..., 
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ..., 
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]],

   [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
    ..., 
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]]], dtype=uint8), 'text': []}]

我想将其转换为此类型:

[[[144  72  17]
[144  72  17]
[144  72  17]
..., 
[144  72  17]
[144  72  17]
[144  72  17]]

[[144  72  17]
[144  72  17]
[144  72  17]
..., 
[144  72  17]
[144  72  17]
[144  72  17]]

[[144  72  17]
[144  72  17]
[144  72  17]
..., 
[144  72  17]
[144  72  17]
[144  72  17]]

1 个答案:

答案 0 :(得分:0)

不完全熟悉比特世界,但根据输出,我会假设你有一个观察阵列(在你的情况下只有一个),每个观察都包含一个dict,可能你可以有其他的传感器输入好吧,但在你的例子中它只包含可见的观察'视觉'(即像素)。因此,要获得所需的数组,请选择第一个元素并提取“vision”元素:

auto body = msg.pop();

parsed.body = gsl::span<uint8_t>{body.data<uint8_t>(), body.size()};