知识点https://blog.csdn.net/u012495579/article/details/106117511网友讲得非常清晰了。
代码如下:
lengths = [17,17,19,23,7]
lengths = torch.Tensor(lengths)
a, idx_sort = torch.sort(torch.Tensor(lengths), dim=0, descending=True)
print(a)
print(idx_sort)
print('----------------------------')
b, idx_unsort = torch.sort(idx_sort, dim=0)
print(b)
print(idx_unsort)
结果是:
主要工作:分析结果是如何计算所得。
torch.sort函数主要包含三个部分得参数,需要排序的数据、根据的维度(二维数组的话,0表列,1表行)、排序方式(升序or降序)。
还需要注意的是:返回值有两个:第一个是排序后的数据,第二个是排序后的索引
a, idx_sort = torch.sort(torch.Tensor(lengths), dim=0, descending=True)
含义:
待排序的数据是:[17,17,19,23,7],按照列排序,降序。
排序后的数据是:23,19,17,17,7 (这个步骤,大部分人都没有问题)
排序后的索引是如何计算的:先看待排序的数据下标[17-【0】,17-【1】,19-【2】,23-【3】,7-【4】],排序后是[23,19,17,17,7],对应的下标就是:[3,2,0,1,4]
现在理解为啥a的结果和idx_sort的结果是这样了吧!
接下来看代码:
b, idx_unsort = torch.sort(idx_sort, dim=0)
含义:
首先看到参数只有待排序的数据和依据,此时是升序还是降序,这就要根据函数原型看了,默认是升序。
其次:寻找待排数据、排序后的数据以及排序后的索引,有思路了就好办了。
待排序的数据是:[3,2,0,1,4],按照列排序,升序。
排序后的数据是:0,1,2,3,4 (这个步骤,大部分人都没有问题)
排序后的索引是如何计算的:先看待排序的数据下标[3-【0】,2-【1】,0-【2】,1-【3】,4-【4】],排序后是[0,1,2,3,4],对应的下标就是:[2,3,1,0,4]