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张量的对角线,而不是作为向量。