1. 程式人生 > 其它 >程式碼閱讀 | torch.sort函式

程式碼閱讀 | torch.sort函式

技術標籤:pytorchpython

知識點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]