Python 3.x 似乎是对象的整数数组
我有一个奇怪的情况,我不明白。我希望使用数组作为索引Python 3.x 似乎是对象的整数数组,python-3.x,numpy,Python 3.x,Numpy,我有一个奇怪的情况,我不明白。我希望使用数组作为索引 batch_index = np.arange(min(mb_size,len(D)), dtype=np.int32) Q_target[batch_index, actions] = rewards + gamma*np.max(Q_next, axis=1)*dones 但当我运行此命令时,会出现一个错误: 索引器:用作索引的数组必须是整数(或布尔值) 类型 它似乎是一个对象数组: In: actions Out: array([2,
batch_index = np.arange(min(mb_size,len(D)), dtype=np.int32)
Q_target[batch_index, actions] = rewards + gamma*np.max(Q_next, axis=1)*dones
但当我运行此命令时,会出现一个错误:
索引器:用作索引的数组必须是整数(或布尔值)
类型
它似乎是一个对象数组:
In: actions
Out: array([2, 2, 2, 2], dtype=object)
在变量资源管理器中也是如此:
类型:对象值数组:numpy模块的ndarray对象
同时:
In:type(actions[0])
Out: numpy.int64
我知道我可以使用:
actions = np.array(actions, dtype=np.int32)
但我不明白我为什么要这么做
附:以下是我如何获得行动的方法
D = deque()
D.append((state, action, reward, state_new, done))
#type(action) == int64
minibatch = np.array(random.sample(D, min(mb_size,len(D))))
actions = minibatch[:,1]
在我看来,这是因为操作
是混合类型的(即完成
是布尔型,奖励
很可能是某种数字等),因为它来自队列
对象。
一般来说,在python中,特别是在NumPy中,当您有一个混合的、非数字的对象类型时,数组将被强制转换为一个对象(或所有项都同意的其他统一类型)。因此,在您的情况下,无法使用此数组为数据编制索引的原因不是由于batch_index
,而是由于actions
数组。actions.dtype
?actions.dtype返回dtype('O'),然后actions
不能(直接)用作索引。