2017-10-10 45 views
0

我對python有點新,我正在使用來自OpenAI的miniWOB。我想用cv2打印出我對我的經紀人的觀察結果。但真的沒關係。我的問題是我不知道哪些數據類型從健身房收到我的「觀察」。但是我想把它作爲一個簡單的三維數組。這種格式我可以使用cv2打印出來。所以任何人都可以幫助我將我的<類的列表觀察轉換爲:< type nunpy.ndarray>?我已經嘗試過觀察= np.asarray(觀察),但後來我得到了這個錯誤:「mat數據類型= 17」。將<class'list'>轉換爲numpy.ndarray

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]] 

回答

0

不完全熟悉位的世界,而是基於輸出,我會假設你有一系列的觀測值(在你的情況下只有一個觀測值),每個觀測值都包含一個字典,可能你也可以有其他的傳感器輸入,但在你的例子中它只包含可見的觀測'視覺'。 。像素)。因此,要獲得想要的陣列,請選擇第一個元素並提取「視覺」元素:

observation = np.asarray(observation[0]['vision']) 
+0

謝謝!這段簡單的代碼實現了訣竅 – lambotje

相關問題