如何在火炬张量中交换两行?

Was*_*mad 5 python pytorch

var = [[0, 1, -4, 8],
       [2, -3, 2, 1],
       [5, -8, 7, 1]]

var = torch.Tensor(var)
Run Code Online (Sandbox Code Playgroud)

这里,var是一个 3 x 4 (2d) 张量。如何交换第一行和第二行以获得以下二维张量?

2, -3, 2, 1 
0, 1, -4, 8
5, -8, 7, 1
Run Code Online (Sandbox Code Playgroud)

sha*_*neb 3

另一个答案不起作用,因为某些维度在复制之前被覆盖:

>>> var = [[0, 1, -4, 8],
       [2, -3, 2, 1],
       [5, -8, 7, 1]]
>>> x = torch.tensor(var)
>>> index = torch.LongTensor([1, 0, 2])
>>> x[index] = x
>>> x
tensor([[ 0,  1, -4,  8],
        [ 0,  1, -4,  8],
        [ 5, -8,  7,  1]])
Run Code Online (Sandbox Code Playgroud)

对我来说,创建一个新的张量(具有单独的底层存储)来保存结果就足够了:

>>> x = torch.tensor(var)
>>> index = torch.LongTensor([1, 0, 2])
>>> y = torch.zeros_like(x)
>>> y[index] = x
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用(遵循discuss.pytorch.orgindex_copy_中的解释),尽管我目前没有看到这两种方式的优点。