将 <class 'list'> 转换为 numpy.ndarray
convert <class 'list'> to numpy.ndarray
我对 python 有点陌生,我正在使用 OpenAI 的 miniWOB。我想用 cv2 打印出我对代理人的观察结果。不过真的无所谓。我的问题是我不知道我从健身房收到的 "observation" 的确切数据类型。但我希望它是一个简单的 3Dimensional numpy 数组。我可以使用 cv2 打印出这种格式。那么有人可以帮助我将我的 < class 'list> 观察结果转换为:< type nunpy.ndarray> 吗?我已经尝试过 observation = np.asarray(observation) 但后来我得到了这个错误:"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]]
不完全熟悉比特世界,但根据输出,我假设你有一组观察(在你的情况下只有一个)并且每个观察都包含一个字典,也许你可以有其他传感器输入也是如此,但在您的示例中,它仅包含可见观察 'vision' (即像素)。因此,要获得您想要的数组,您 select 第一个元素并提取 "vision" 元素:
observation = np.asarray(observation[0]['vision'])
我对 python 有点陌生,我正在使用 OpenAI 的 miniWOB。我想用 cv2 打印出我对代理人的观察结果。不过真的无所谓。我的问题是我不知道我从健身房收到的 "observation" 的确切数据类型。但我希望它是一个简单的 3Dimensional numpy 数组。我可以使用 cv2 打印出这种格式。那么有人可以帮助我将我的 < class 'list> 观察结果转换为:< type nunpy.ndarray> 吗?我已经尝试过 observation = np.asarray(observation) 但后来我得到了这个错误:"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]]
不完全熟悉比特世界,但根据输出,我假设你有一组观察(在你的情况下只有一个)并且每个观察都包含一个字典,也许你可以有其他传感器输入也是如此,但在您的示例中,它仅包含可见观察 'vision' (即像素)。因此,要获得您想要的数组,您 select 第一个元素并提取 "vision" 元素:
observation = np.asarray(observation[0]['vision'])