我想索引一个二维矩阵行和重新分配值。
例如,首先考虑一个一维向量的情况,我们有三个形状相同的一维Tensort1, indexes, t2
。我们可以这样做索引和重新分配:
indexes = torch.tensor([0, 2, 1, 3])
t1 = torch.tensor([0.0, 0.0, 0.0, 0.0])
t2 = torch.tensor([0.1, 0.2, 0.3, 0.4])
t1[indexes] = t2
现在,假设t1, indexes, t2
是二维矩阵而不是一维向量,并且具有相同的形状(R X C)
。我想对这些矩阵中的每一行做类似的索引,其中:
for i in range(R):
t1[i][indexes[i]] = t2[i]
我想将这个操作向量化,而不是使用for循环。我该怎么做?
2条答案
按热度按时间sh7euo9m1#
因此,为了进行
multi-index
选择,您可以使用torch.gather函数,该函数沿dim(第二个参数)指定的轴沿着收集值。示例1:
产出:
示例二:
产出:
要了解更多关于
torch.gather
函数的信息,请参阅this SO讨论。你也可以使用
torch.Tensor.scatter_
来做同样的事情。t1.scatter_(0, indexes, t2)
基本上是说将t2
Tensor的元素发送到t1
Tensor中的以下索引(在indexes
Tensor中指定),按行(dim 0)。示例:
产出:
你可以阅读更多关于它从这里。
8yoxcaq72#
类似于@Anubhav的回答,
scatter_
的维度略有变化,这就完成了任务。来源:PyTorch Discussion