这个任务看起来很简单,但我不知道该怎么做。
所以我有两个张量:
indices形状为 的索引张量(2, 5, 2),其中最后一个维度对应于 x 和 y 维度中的索引value形状为“值张量” (2, 5, 2, 16, 16),我希望使用 x 和 y 索引选择最后两个维度更具体地说,索引在 0 到 15 之间,我想得到一个输出:
out = value[:, :, :, x_indices, y_indices]
Run Code Online (Sandbox Code Playgroud)
因此,输出的形状应为(2, 5, 2)。有人可以帮我吗?多谢!
编辑:
我尝试了收集的建议,但不幸的是它似乎不起作用(我改变了尺寸,但这并不重要):
首先我生成一个坐标网格:
y_t = torch.linspace(-1., 1., 16, device='cpu').reshape(16, 1).repeat(1, 16).unsqueeze(-1)
x_t = torch.linspace(-1., 1., 16, device='cpu').reshape(1, 16).repeat(16, 1).unsqueeze(-1)
grid = torch.cat((y_t, x_t), dim=-1).permute(2, 0, 1).unsqueeze(0)
grid = grid.unsqueeze(1).repeat(1, 3, 1, 1, 1)
Run Code Online (Sandbox Code Playgroud)
在下一步中,我将创建一些索引。在这种情况下,我总是采用索引 1:
indices = torch.ones([1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用pytorch中的gather函数,但无法理解参数的作用dim。
代码:
t = torch.Tensor([[1,2],[3,4]])
print(torch.gather(t, 0, torch.LongTensor([[0,0],[1,0]])))
Run Code Online (Sandbox Code Playgroud)
输出:
1 2
3 2
[torch.FloatTensor of size 2x2]
Run Code Online (Sandbox Code Playgroud)
维度设置为 1:
print(torch.gather(t, 1, torch.LongTensor([[0,0],[1,0]])))
Run Code Online (Sandbox Code Playgroud)
输出变为:
1 1
4 3
[torch.FloatTensor of size 2x2]
Run Code Online (Sandbox Code Playgroud)
功能实际上如何gather运作?