Pytorch学习:将tensor中的元素按值的大小顺序进行位置调换

参考资料:https://blog.****.net/LXX516/article/details/78804884

  在Pytorch使用中,可能会用到这样的tensor操作:将tensor中的元素按值的大小顺序进行位置调换,即最大值和最小值进行位置对换,次大值和次小值进行位置对换……根据值的大小依次进行位置对换。如果tensor中的值是按大小顺序排列的,那就是简单的反转。那如果tensor中的值是乱序的呢?

  开动了一下我的小脑筋,我发现可以通过使用一次sort函数得到升序后元素在原tensor中的位置,再使用一次sort函数得到降序后元素在原tensor中的位置,反过来也可以,然后进行位置互换,来看一下实例:

对于一维的tensor

Pytorch学习:将tensor中的元素按值的大小顺序进行位置调换

一维tensor示例

  从图中可以看出,a11和b11分别是通过sort函数得到的降序和升序后元素在原tensor中的位置,根据这两个位置列表就可以实现tensor中的元素按值的大小顺序进行位置调换。

对于二维的tensor

  因为sort函数只能在某一个维度上进行操作,返回的位置列表也是该维度上的index,因此,对于二维的tensor,方法不变,但我们需要人为补上一个维度的索引。

Pytorch学习:将tensor中的元素按值的大小顺序进行位置调换

二维tensor示例
(有一步unsqueeze是错误操作,捂脸。。。)

  上图中的b向量就是我们人为补上的0维索引。对于多维tensor的情况,大家可以参照二维的情况,自由开动小脑瓜吧~