pytorch技巧1: 数组排序后复原

本文介绍了如何使用PyTorch中的`torch.sort`函数进行数组排序,并通过索引恢复原始顺序。通过示例展示了排序后的索引(idx1)如何表示排序前数组元素的位置,以及如何通过二次排序得到的索引(idx2)恢复原始数组。
摘要由CSDN通过智能技术生成

pytorch用法1: 数组排序后复原

主要是利用torch.sort函数里返回的第二个参数index,这个index表示的是排序后的数字在原来数组中的位置。

比如:

l = torch.randint(10,(10,))
a, idx1 = torch.sort(l)

结果为:
l: tensor([3., 3., 8., 7., 9., 9., 7., 4., 5., 1.])
a: tensor([1., 3., 3., 4., 5., 7., 7., 8., 9., 9.])
idx1: tensor([9, 0, 1, 7, 8, 3, 6, 2, 4, 5])

这里的index结果比如是从0到N的,这里的idx1中的值就对应a中的值在b中的位置,比如idx1中的第一个9表示a中的1在数组l中出现在第9个。

如果我们将这个index再进行排序就会发现第二次得到的index保留了一些有用的信息:

b, idx2 = torch.sort(idx1)

b: tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
idx2: tensor([1, 2, 7, 5, 8, 9, 6, 3, 4, 0])

idx2的结果表示的是b中的值在idx1中出现的原位置,而idx1中的数的位置表示的正是数组a中的数字在原始数组l中的数的位置。于是如果使用a按照idx2的结果来选择数字,就得到了原始数组l:

a.index_select(0,idx2) #0表示选择的维度

结果正是数组l。

组合起来如下所示:

import torch

l = torch.randint(10,(10,))
a, idx1 = to
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值