我试图将强化学习连续动作值range(-1.0,1.0)
Map到真实的输出。
假设我有一个numpy action数组actions = np.array([-1., 0.2, -0.3, 0.5])
,数组的值可以是actions.min = -1.
和actions.max = 1.
。
现在,我需要将每个条目Map到单独的范围,例如
- 操作[0]Map到范围(-0.4,1.54)
- action [1]Map到range(1.4,1.54)
- 操作[2]Map到范围(-2.4,2.0)
- 操作[3]Map到范围(-1.54,0.4)
Map动作mapped_actions = np.array([-0.4, 1.484, -0.86, -0.085])
我目前的解决方案如下:
import numpy as np
actions = np.array([-1., 0.2, -0.3, 0.5])
mapped_low_high = np.array([[-0.4, 1.54], [1.4, 1.54],[-2.4, 2.], [-1.54, 0.4]])
mapped_actions = np.zeros_like(actions)
for i in range(actions.shape[0]):
mapped_actions[i] = np.interp(actions[i], (-1., 1.), mapped_low_high[i])
字符串
2条答案
按热度按时间dxxyhpgq1#
用numpy数组进行循环比较慢。编写一个可以同时对整个数组进行操作的矢量化函数会更快。因为我们知道给定数组总是在-1和1之间,并且我们有一个新范围的数组,代码是一个简单的函数,它可以从一个范围Map到另一个范围。
[a, b]
的值。“字符串
o4hqfura2#
直接使用
np.interp
函数Map整个actions
数组,而不使用循环。字符串
通过在整个数组上使用
np.interp
,可以避免使用循环,并以更简洁的方法获得相同的结果。