程式碼閱讀 | torch.sort函式
知識點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]