在 PyTorch 中,内置torch.roll函数只能以相同的偏移量移动列(或行)。但我想用不同的偏移量来移动列。假设输入张量是
[[1,2,3],\n [4,5,6],\n [7,8,9]]\nRun Code Online (Sandbox Code Playgroud)\n比方说,我想i对第 i 列进行偏移量移动。因此,预期输出是
[[1,8,6],\n [4,2,9],\n [7,5,3]]\nRun Code Online (Sandbox Code Playgroud)\n这样做的一个选项是使用每个列单独移动torch.roll并连接它们。但出于有效性和代码紧凑性的考虑,我不想引入循环结构。有没有更好的办法\xef\xbc\x9f
让我们定义一些名称:
import torch
mat = torch.Tensor(
[[1,2,3],
[4,5,6],
[7,8,9]])
indices = torch.LongTensor([0, 1, 2]) # Could also use arange in this specific scenario
Run Code Online (Sandbox Code Playgroud)
首先,你可以创建一个像这样的张量
[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]]
Run Code Online (Sandbox Code Playgroud)
使用
[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]]
Run Code Online (Sandbox Code Playgroud)
现在,让我们创建一个目标索引的张量
[[0, 2, 1],
[1, 0, 2],
[2, 1, 0]]
Run Code Online (Sandbox Code Playgroud)
和
arange1 = torch.arange(3).view((3, 1)).repeat((1, 3))
Run Code Online (Sandbox Code Playgroud)
最后,我们得到预期的输出
[[0, 2, 1],
[1, 0, 2],
[2, 1, 0]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3679 次 |
| 最近记录: |