Python 带索引列表的切片火炬张量
我正在做一个强化学习项目,我试图得到一个张量,表示所有给定动作的预期回报。我有一个选择动作的长张量,大小为Python 带索引列表的切片火炬张量,python,pytorch,slice,Python,Pytorch,Slice,我正在做一个强化学习项目,我试图得到一个张量,表示所有给定动作的预期回报。我有一个选择动作的长张量,大小为batch,值为0或1(两个潜在动作)。对于每一个大小为batch*action\u size的行动,我有一个预期奖励的张量,我想要一个大小为batch的张量 例如,如果批量大小为4,则 action = tensor([1,0,0,1]) expectedReward = tensor([[3,7],[5,9],[-1,12],[0,1]]) 我想要的是 rewardForActions
batch
,值为0或1(两个潜在动作)。对于每一个大小为batch*action\u size
的行动,我有一个预期奖励的张量,我想要一个大小为batch
的张量
例如,如果批量大小为4,则
action = tensor([1,0,0,1])
expectedReward = tensor([[3,7],[5,9],[-1,12],[0,1]])
我想要的是
rewardForActions = tensor([7,5,-1,1])
我以为这会回答我的问题,但它完全不一样,因为如果我用这个解决方案,它会得到一个4*4张量,从每行中选择4次,而不是一次
有什么想法吗?你可以
rewardForActions = expectedReward.index_select(1, action).diagonal()
# tensor([ 7, 5, -1, 1])
使用torch.index_select()的解决方案实际上给出了我想要的向量,除了它沿着输出4*4张量的对角线,而不是作为向量。