如何根据另一个火炬张量中的索引更改火炬张量中的某些值?

2024-06-13 17:05:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在convertinfDQN将cartpole问题的DQN加倍时运行的问题。我快弄明白了

tensor([0.1205, 0.1207, 0.1197, 0.1195, 0.1204, 0.1205, 0.1208, 0.1199, 0.1206,
        0.1199, 0.1204, 0.1205, 0.1199, 0.1204, 0.1204, 0.1203, 0.1198, 0.1198,
        0.1205, 0.1204, 0.1201, 0.1205, 0.1208, 0.1202, 0.1205, 0.1203, 0.1204,
        0.1205, 0.1206, 0.1206, 0.1205, 0.1204, 0.1201, 0.1206, 0.1206, 0.1199,
        0.1198, 0.1200, 0.1206, 0.1207, 0.1208, 0.1202, 0.1201, 0.1210, 0.1208,
        0.1205, 0.1205, 0.1201, 0.1193, 0.1201, 0.1205, 0.1207, 0.1207, 0.1195,
        0.1210, 0.1204, 0.1209, 0.1207, 0.1187, 0.1202, 0.1198, 0.1202])
tensor([ True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True, False,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True, False,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True])

如你们所见,这里有两个张量。 first具有我想要的q值 但是 某些值需要更改为零,因为它是结束状态。 second张量显示了它将是零的位置

在布尔值为false的索引处,是上张量需要为零的等效点。 我不知道该怎么做


Tags: falsetrue状态dqnfirsttensorsecondcartpole
2条回答

如果上面的张量是值张量,下面的张量是决策张量,那么

value_tensor[decision_tensor==False] = 0

此外,您还可以将它们转换为numpy数组并执行相同的操作,这样应该可以正常工作

您可以使用^{}-torch.where(condition, x, y)

示例:

>>> x = tensor([0.2853, 0.5010, 0.9933, 0.5880, 0.3915, 0.0141, 0.7745,  
                0.0588, 0.4939, 0.0849])
>>> condition = tensor([False,  True,  True,  True, False, False,  True,  
                        False, False, False])

>>> # It's equivalent to `torch.where(condition, x, tensor(0.0))`
>>> x.where(condition, tensor(0.0))
tensor([0.0000, 0.5010, 0.9933, 0.5880, 0.0000, 0.0000, 0.7745,  
        0.0000, 0.0000,0.0000])

相关问题 更多 >